连接到SQL Server CE数据库时,我的程序中出现运行时错误。
任何人都可以帮助我,请不要将整个代码写成需要更改的内容。
这是我的代码:
string conString = Properties.Settings.Default.POSdatabaseConnectionString;
using (SqlCeConnection con = new SqlCeConnection(conString))
{
con.Open();
using (SqlCeCommand com = new SqlCeCommand("SELECT * FROM Customer where Customer ID ='" + this.useridtexbox.Text + "' and Name='" + this.nametexbox.Text + "'", con))
{
SqlCeDataReader reader = com.ExecuteReader();
int count = 0;
while (reader.Read())
{
count = count + 1;
}
if (count == 1)
{
MessageBox.Show("You have logged in succesfully");
Homepage homepage = new Homepage();
homepage.Show();
homepage.LabelText = ("Welcome " + reader["name"].ToString());
}
else
{
MessageBox.Show("Username and password is Not correct ...Please try again");
con.Close();
}
错误:
解析查询时出错。 [令牌行号= 1,令牌行偏移= 39,令牌错误= ID]
答案 0 :(得分:2)
我认为客户ID中的空格存在问题,试试这个
SqlCeCommand com = new SqlCeCommand("SELECT * FROM Customer where CustomerID ='" + this.useridtexbox.Text + "' and Name='" + this.nametexbox.Text + "'", con))
答案 1 :(得分:1)
在命令中,不要使用字符串连接。这将导致严重失败,让您对SQL注入攻击持开放态度。
如果我在this.nametexbox.Text
中输入以下文字,会发生什么:
乔&#39 ;; DROP DATABASE; -
您不希望像little Bobby Tables这样的用户。
使用sql参数。
如果您有包含空格的表格或字段,则可以与DBA联系。如果您无法更改它,请确保使用正确的语法:
WHERE [Customer ID] = '12345'
答案 2 :(得分:0)
确保CustomerID
列有空格
始终使用参数化查询来避免SQL注入
How does SQLParameter prevent SQL Injection
SqlCeCommand com = new SqlCeCommand = "SELECT * FROM Customer where CustomerID=@CustomerID and
name=@name";
con.Parameters.AddWithValue("@CustomerID", valuesTextBox.Text);
con.Parameters.AddWithValue("@name", namwTextBox.Text);