以下是学习中小结,若有幸被大侠看到,文章中的错误还望不吝赐教。。。。
C#中使用 SQL语句
首先注意两点:
第一、语句的构造是否正确, 第二、与程序交互时,使用到的一些变量
1. 在sql语句中。 如果某个字段的数据类型不为数字形式,那么在sql语句中,如条件判断...都需要用到(两个单引号)将数据 括起来; 例如:
表[student] id(自动编号) uID(学号) uName(学生姓名)
-->查询(名字是李世民的学生信息) :
select uID, uName FROM student WHERE uName = '李世民'
2.在C#中,string 类型的变量需要使用(两个双引号) “” 括起来
结合以上两点、在c#中拼凑SQL查询语句你就可以这样使用
string str_Sql = " SELECT uID, uName FROM student WHERE uName ='李世民'";
---------------------------------------------------------------------------
1.首先把你的SQL语句构造好。 不要先加变量
string str_Sql = " SELECT uID, uName FROM student WHERE uName = ' "+ +" ' " ;
2.在需要使用变量的位置,用(两个双引号)将这句话分开。
现在它只不过是字符串而已;
在这其中,你可以看出来,where后加入的两个双引号,一个是用来结束,与最开头的双引号对应。
---->在c#语句中。使用两个双引号 将字符串括起来。注意一定要成对
---->连接两个字符串所有的操作符是 + 号
---------------------------------------------------------
string str_Sql =" SELECT uID, uName FROM student WHERE uName = ' "+变量 +" ' " ;
总结:双引号" 和加号 + 是C#中的定界符.
两个双引号之中的字符都被程序认定为字符串不参与任何计算或是程序的执行。仅仅是字符串。而加号是连接两个字符串的定界符。
比如 string str_Print = "我是" + "天下第一";
变量 str_Print的值为 我是天下第一
单引号'是SQL语句中对数据类型为字符类型的字段使用的nvarchar ntext nchar 。。。
----------------------------------------------------------------------------------------
//some 查询语句
string sql= string.Format("select * from UserInfo where Uname='{0}'and UPwd='{1}'and UState='{2}'", this.txtName.Text.Trim(),this.txtPwd.Text.Trim(),num);
------------------
//定义sql语句
string sql="select * from BookInfo where BookType='"+booktype+"' "+cbo1+" BookName like '%" +bookname+"%' "+cbo2+" BookContent like '%"+bookcontent+"%'";
---------------------------------
string sql=string.Format(insert into BookInfo values('{0}' , '{1}' ,'{2}' ,'{3}' ,'{4}' ,'{5}' ,'{6}' ", booktype,bookauthor,bookpic,bookprice,bookcontent,bookissue );
-------------------------------------------------------
(1)拼接产生SQL语句:
以下是代码片段: string sql = "insert into czyb(yhm,mm,qx) values('" + txtName.Text + "','" + txtPassword.Text + "','" + cmbPriority.Text + "')"; OleDbCommand cmd = new OleDbCommand(sql, conn); |
这种方法写法比较复杂,且安全性低,容易遭受SQL注入攻击。
(2)用string.Format方法:
以下是代码片段: string sql = string.Format("insert into czyb(yhm,mm,qx) values('{0}','{1}','{2}')", txtName.Text, txtPassword.Text, cmbPriority.Text); |
(3)用参数化SQL语句:
以下是代码片段: string sql="insert into czyb(yhm,mm,qx) values (@yhm,@mm,@qx)"; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = sql; cmd.Parameters.AddWithValue("@yhm", txtName.Text); cmd.Parameters.AddWithValue("@mm", txtPassword.Text); cmd.Parameters.AddWithValue("@qx", cmbPriority.Text); cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); |
代码结构清楚,对于不支持存储过程的数据库(如Access),推荐采用本方法。
(4)如果数据库支持存储过程(如SQL Server),可以调用存储过程执行SQL:
以下是代码片段: SqlConnection conn = new SqlConnection(txtConn); SqlCommand cmd = new SqlCommand("SearchContact", conn); //存储过程名称为SearchContact cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@name", SqlDbType.VarChar, 50); //传入参数 cmd.Parameters["@name"].Value = txtName.Text.Trim(); |
由于存储过程是数据库预编译的,执行效率高,推荐采用。