C#中的连接与Access数据库的SQL查询

时间:2011-12-31 13:26:48

标签: c# sql ms-access

我有一个带有C#的Access Db,我正在sql查询后面的一个串联where子句但是我收到以下错误

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

我的代码在

下面
cmd.CommandText = "Select * from TEMP1 WHERE EMAIL=" + GlobalData.Email; 

请告诉我导致错误的原因以及连接的正确语法。

6 个答案:

答案 0 :(得分:10)

你最好使用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'

答案 1 :(得分:5)

我认为您的问题缺少引号。试试这个:

cmd.CommandText = "Select * from TEMP1 WHERE EMAIL='" + GlobalData.Email + "'"; 

但是,如果您不验证电子邮件,那么该方法可能会导致SQL注入。虽然上面的代码没有任何问题,但如果验证了数据,我更喜欢使用SQL参数:

SqlCommand cmd = new SqlCommand( "SELECT * FROM Temp1 WHERE Email = @Email" )
cmd.Parameters.Add( new SqlParameter( "Email" , GlobalData.Email ) );

答案 2 :(得分:2)

请尝试使用Parameterised queries。出于安全原因和可读性,这通常是使用SQL查询时的常态。

答案 3 :(得分:2)

字符串文字周围没有任何撇号,因此您的查询最终会像:

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;

答案 4 :(得分:1)

尝试以下内容

cmd.CommandText = "Select * from TEMP1 WHERE EMAIL='" + GlobalData.Email + "'"; 

答案 5 :(得分:1)

我不确定错误,但你应该像那样试试

cmd.CommandText = string.Format("SELECT * FROM TEMP1 WHERE EMAIL='{0}'", GlobalData.Email);

这样你就不需要乱用丑陋的连接,占用很多内存。