2010-05-05 91 views
0

嗨! 我想比较文本框中的值与表中的数据。我试过这段代码,但是我得到了输入字符串格式错误的错误! 代码:将文本框的值与数据库进行比较

string connectionString = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=save.mdb"; 

try 
{ 

    database = new OleDbConnection(connectionString); 
    database.Open(); 
    string queryString = "SELECT zivila.naziv,users.user_name FROM (obroki_save " 
     + " LEFT JOIN zivila ON zivila.ID=obroki_save.ID_zivila) " 
     + " LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika " 
     + " WHERE users.ID='" +Convert.ToInt16(id.iDTextBox.Text)+"'"; 
    loadDataGrid(queryString); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    return; 
} 
+1

你确定文本框是所有的数字?也许可以使用int.TryParse。 – 2010-05-05 20:31:51

+0

还阅读了保护您免受Sql注入!这是一个Sql Injection潜在的经典例子! http://en.wikipedia.org/wiki/SQL_injection – 2010-05-05 20:46:19

+0

不够公平。只是跟进。偷窥新网站往往忘记跟进问题。 – 2010-05-05 21:00:12

回答

0

您的ConnectionString应该是这样的:

提供商= Microsoft.Jet.OLEDB.4.0;数据源= C:\了MyDatabase.mdb;用户ID =管理员;密码=;你可以找到connectionstrings.com

构建SQL时
0

上的ConnectionStrings

的更多信息,你试图将字符串和一个Int16的值。尝试删除Convert.ToInt16(),只留下文本框的字符串值。

+0

我在条件表达式中得到一个错误(这就是程序说的) – simon 2010-05-05 20:54:13

0

试着改变你的最后一行

+ " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 

基本上都是从各地的Int16去除单引号

+0

我得到和sql中的错误语法 – simon 2010-05-05 20:56:26

0

你可以试试这个:

string connectionString = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=save.mdb"; 

try 
{ 
     Int16 id = Int16.Parse(id.iDTextBox.Text); 

    database = new OleDbConnection(connectionString); 
    database.Open(); 
    string queryString = "SELECT zivila.naziv,users.user_name FROM (obroki_save " 
     + " LEFT JOIN zivila ON zivila.ID=obroki_save.ID_zivila) " 
     + " LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika " 
     + " WHERE users.ID=" + id.ToString(); 
    loadDataGrid(queryString); 
     database.Close(); 
} 
catch (FormatException fex) 
{ 
    MessageBox.Show(fex.Message); 
    return; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    return; 
} 

这样你会拦截坏数据和保护您免受Sql注入。

另外,不要忘记关闭您的连接,或使用using keyword上阅读了。

还尝试运行与价值在SQL编辑器中的硬编码ID查询,以确保它的工作原理:

SELECT zivila.naziv,users.user_name 
FROM (obroki_save AS os LEFT JOIN zivila AS z ON z.ID=os.ID_zivila) 
LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika 
WHERE users.ID=16 
+0

我仍然得到相同的错误(输入字符串格式错误) – simon 2010-05-05 21:16:43

+0

a仍然得到错误。该死的。 – simon 2010-05-05 21:38:48

0

如果你的ID字段是int,你不应该把'它周围。

所以更改

+ " WHERE users.ID='" +Convert.ToInt16(id.iDTextBox.Text)+"'"; 

+ " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 
相关问题