连接数据库

时间:2014-03-25 12:08:21

标签: c# sql database visual-studio-2010 sql-server-ce

连接到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]

3 个答案:

答案 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);