我是编码新手,目前正在尝试制作此条形码跟踪器程序。到目前为止,我进行了搜索并找到了我需要的东西,但是现在找不到该问题的答案(或者无法理解人们想说的话)。所以这是我的问题:
我正在使用Ms Access作为数据库,但是作为数字数据类型,Access允许我输入最多10位数字。另外,我知道有些条形码包含字母字符,因此我必须将数据类型更改为文本。如果包含条形码的列的数据类型是数字,则程序可以工作。当我将列的数据类型更改为文本时,程序会给出数据类型不匹配错误。
这是我的代码:
public partial class Form1 : Form
{
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Barcode\\Database.accdb; Persist Security Info=False");
OleDbDataReader DataReader;
OleDbCommand command;
bool flag = false;
public Form1()
{
InitializeComponent();
}
public void Form1_Load(object sender, EventArgs e)
{
}
public void txt_UPC_KeyDown(object sender, KeyEventArgs e)
{
if ((txt_UPC.Text == "") && (e.KeyCode == Keys.Enter))
{
e.Handled = true;
}
else
{
if (e.KeyValue == (char)Keys.Enter)
{
connection.Open();
string SelectQuery = "SELECT * FROM Products where [UPC]=" + txt_UPC.Text.ToString();
command = new OleDbCommand(SelectQuery, connection);
DataReader = command.ExecuteReader(); **//Error occurs here...**
while (DataReader.Read())
{
txtProduct.Text = DataReader["Product"].ToString();
txtPrice.Text = DataReader["Price"] + " ₺";
if (DataReader["UPC"].ToString() == txt_UPC.Text)
{
flag = true;
}
}
if (flag == true)
{
Test.Text = "Known Product";
txt_UPC.Text = "";
flag = false;
}
else
{
Test.Text = "Unknown Product";
}
connection.Close();
}
}
}
}
答案 0 :(得分:1)
建议对文本类型字段参数使用撇号定界符。
string SelectQuery = "SELECT * FROM Products where [UPC]='" + txt_UPC.Text.ToString() + "'";
答案 1 :(得分:0)
您需要完整的SQL Server表达式。您当前有
string SelectQuery = "SELECT * FROM Products where [UPC]=" + txt_UPC.Text.ToString();
假设txt_UPC.Text
是一个字符串,您可能需要这样做:
string SelectQuery = "SELECT * FROM Products where [UPC]= '" + txt_UPC.Text.ToString() + "'";
这会将您的字符串括在SQL语言规定的单引号中。对于它的价值,您可能也不需要.ToString()
。
而且,像您正在做的那样串联SQL是一个非常糟糕的主意,尤其是当您包含用户输入的文本时。阅读“ SQL注入”并使用参数化的SQL。