用SQL查询访问数据库的c#串联

本文关键字:串联 数据库 访问 SQL 查询 | 更新日期: 2023-09-27 18:19:12

我有一个Access Db与c#和我正在做一个连接sql查询后where子句,但我得到以下错误

"查询表达式中语法错误(缺少运算符)"

我的代码在 下面
cmd.CommandText = "Select * from TEMP1 WHERE EMAIL=" + GlobalData.Email; 

请告诉我是什么原因导致错误,正确的语法是什么连接

用SQL查询访问数据库的c#串联

您最好使用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);

这样你就不需要弄乱丑陋的连接,顺便说一下,占用大量的内存。