用SQL查询访问数据库的c#串联
本文关键字:串联 数据库 访问 SQL 查询 | 更新日期: 2023-09-27 18:19:12
我有一个Access Db与c#和我正在做一个连接sql查询后where子句,但我得到以下错误
"查询表达式中语法错误(缺少运算符)"
我的代码在 下面cmd.CommandText = "Select * from TEMP1 WHERE EMAIL=" + GlobalData.Email;
请告诉我是什么原因导致错误,正确的语法是什么连接
您最好使用SqlParameter(更安全):
SqlCommand cmd = new SqlCommand("SELECT * FROM Temp1 WHERE Email LIKE @email")
cmd.Parameters.Add(new SqlParameter("email", GlobalData.Email));
回答原来的问题:
使用直接连接,不使用字符串分隔符,您的查询变成:
SELECT * FROM Temp1 WHERE Email LIKE email@email.com
代替
SELECT * FROM Temp1 WHERE Email LIKE 'email@email.com'
我认为你的问题是缺少引号。试试这个:
cmd.CommandText = "Select * from TEMP1 WHERE EMAIL='" + GlobalData.Email + "'";
但是如果您不验证电子邮件,该方法可能导致SQL注入。虽然上面的代码没有什么问题,但是如果要验证数据,我更喜欢使用SQL Parameters:
SqlCommand cmd = new SqlCommand( "SELECT * FROM Temp1 WHERE Email = @Email" )
cmd.Parameters.Add( new SqlParameter( "Email" , GlobalData.Email ) );
尝试使用参数化查询。在处理SQL查询时,出于安全性和可读性的考虑,这通常是标准的。
字符串文本周围没有任何撇号,因此您的查询将以如下方式结束:
Select * from TEMP1 WHERE EMAIL=someone@somesite.com
这当然会导致语法错误。您需要在字符串周围加上撇号:
cmd.CommandText = "Select * from TEMP1 WHERE EMAIL='" + Replace(GlobalData.Email, "'", "''") + "'";
然而,正确编码字符串并不是一件小事。(上述方法适用于Access和Microsoft SQL Server,但其他数据库需要其他方法。)您应该使用参数化查询:
cmd.CommandText = "Select * from TEMP1 WHERE EMAIL=@email";
然后向命令对象添加一个参数,例如:
cmp.Parameters.Add("@email", DbType.VarChar, 300).Value = GlobalData.Email;
试试下面的内容
cmd.CommandText = "Select * from TEMP1 WHERE EMAIL='" + GlobalData.Email + "'";
我不确定错误,但你应该试试这样
cmd.CommandText = string.Format("SELECT * FROM TEMP1 WHERE EMAIL='{0}'", GlobalData.Email);
这样你就不需要弄乱丑陋的连接,顺便说一下,占用大量的内存。