如何向数据库插入带有单引号(')的字符串?
上一篇 /
下一篇 2012-10-29 11:35:20
/ 个人分类:数据库
XQv6Z$o4D0 用SQL语句往数据库某字段(字符型)中插入字符串,但是当该字符串中带有单引号(')时就会出错!因为插入的字符串被从单引号处截断,造成SQL语句的语法错误!
Qaa'x,]04ql#D_1qu\U|?0 我们在编程当中,经常会遇到在操作数据库时,向表里插入带有单引号的字符串。如果不作处理程序会报错,下面看看我们是怎么的处理它的。51Testing软件测试网&U"{J
aH2TXJ
0Q0A#t.tsx(iA%\0 用SQL语句往数据库某字段(字符型)中插入字符串,但是当该字符串中带有单引号(')时就会出错!因为插入的字符串被从单引号处截断,造成SQL语句的语法错误!
]o&|2wo-[:|?051Testing软件测试网-\i)]^-a0|'m8a 解决方法:遍历字符串,把一个(')换成两个(' ')就可以了,在C#里,其实用str.Replace("'", "''");就OK了,这是因为SQL是用两个单引号来代替一个单引号的,下面举个例子:
?l6F'B0Vc0private void btAdd_Click(object sender, EventArgs e) `1H"nV(I;r:SLp { q0 { 7p9Nx-n7eZ:c0 string chinese = this.txtChinese.Text.Trim(); ?B4G;S:y,[ _/Nk0 string english = this.txtEnglish.Text.Trim(); q&iz
jzx0 if (chinese == "")51Testing软件测试网T5Q7^Q;Ny { s,l/X7Zh+P@`+Bz:g+F0 MessageBox.Show("请输入中文!");51Testing软件测试网Km!FPK9t2tS Fr }51Testing软件测试网H!Q6DlHc*I else if (english == "")51Testing软件测试网"D2}aE9P*V { o9E:j&G$Vx5O0 MessageBox.Show("请输入英文!");
{2sW$O|2fs4Sqc0 } Wj.z-FOA*g0 else51Testing软件测试网v3{[O%C+Y?/],i Z { #z4w4[+Y4Q*PD0 oleConnection1.Open();51Testing软件测试网$kh,Gq/{Mj?h
string sql = "Select * From info Where chinese='" +
CheckString(chinese) + "' And english='" + CheckString(english) + "'"; u3W4zV{(JoS3?5Y0 this.oleCommand1.CommandText = sql;51Testing软件测试网7hqg*T+@r if (null == oleCommand1.ExecuteScalar())51Testing软件测试网2N,zv8t)gk{ { #U{ bv(L!XD
T*X8o(X]0
string sql1 = "Insert Into info(chinese,english) Values('" +
CheckString(chinese) + "','" + CheckString(english) + "')"; f'n]{g-P0 oleCommand1.CommandText = sql1; 8}
HR3tM*M^{0 oleCommand1.ExecuteNonQuery();51Testing软件测试网rURRcI MessageBox.Show("信息添加成功!", "提示");51Testing软件测试网,[/RL5C0R~WO3X this.txtChinese.Text = "";51Testing软件测试网K;U a&Uo}^TlW this.txtEnglish.Text = "";51Testing软件测试网3{5x7rTV&D
yE"j*P_ } 0{CsrF*keM&u;U0 else GT~2k;?i
Z7kBw.@0 {51Testing软件测试网&vTQ$l }I
~
a#s+] MessageBox.Show("信息添加失败,中文和英文已经存在了!", "警告");51Testing软件测试网D,{5o1uv
g this.txtChinese.Text = "";51Testing软件测试网U)J|9dM$MF this.txtEnglish.Text = "";51Testing软件测试网A;x'Tni } (E,o b-WqI0@?b0 oleConnection1.Close(); I&HX1UXgV0 } 'zg g+m7r{P0 } |
private string CheckString(string str)51Testing软件测试网#FVx [r { +Y8QL#z0W
|I0 string returnStr = "";51Testing软件测试网mNc0mqA|A if (str.IndexOf("'") != -1) //判断字符串是否含有单引号51Testing软件测试网Tb?6M6{'~,TD8t/Y { 2n
QON
kS0 returnStr = str.Replace("'", "''"); ly!m [U
t0 str = returnStr; A](A
k"L0 } p;`V^K7V:I0 return str;51Testing软件测试网J~v9DQZ+M } |
'Bc(`/?D b"o0 这里为什么要用另一个变量(returnStr)来接收替换后的值呢?不然替换会失效,调用Replace()方法不能改变str本身,string对象虽然是引用类型,但它具有很多值类型特征,比较特殊。51Testing软件测试网S+N0\3uJ
收藏
举报
TAG: