我遇到了一个问题,我只能在单个文本框中从数据库中检索数据。我想要的是,我想从数据库中检索每个文本框的数据,但是当我尝试时,得到错误:
以下是代码:
string connectionString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\Archives\Projects\Program\Sell System\Sell System\App_Data\db1.accdb;Persist Security Info=False;");
private List<List<TextBox>> textBoxCodeContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxQuantityContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxDescContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxSubTotalContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxTotalContainer = new List<List<TextBox>>();
private void Form1_Load(object sender, EventArgs e)
{
UpdateTextPosition();
OleDbDataReader dReader;
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT [Code] FROM [Data]", conn);
dReader = cmd.ExecuteReader();
AutoCompleteStringCollection codesCollection = new AutoCompleteStringCollection();
while (dReader.Read())
{
string numString = dReader[0].ToString().PadLeft(4, '0');
codesCollection.Add(numString);
}
dReader.Close();
conn.Close();
}
private void UpdateDatas()
{
OleDbDataReader dReader;
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT DISTINCT [Description], [Price] FROM [Data] WHERE [Code]=@Code", conn);
cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][0].Text;
dReader = cmd.ExecuteReader();
while (dReader.Read())
{
this.textBoxDescContainer[0][0].Text = dReader["Description"].ToString();
this.textBoxSubTotalContainer[0][0].Text = dReader["Price"].ToString();
}
dReader.Close();
conn.Close();
}
我已经尝试过添加:
cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][1].Text;
和
while (dReader.Read())
{
this.textBoxDescContainer[0][1].Text = dReader["Description"].ToString();
this.textBoxSubTotalContainer[0][1].Text = dReader["Price"].ToString();
}
但是我收到一条错误,上面写着:“无法将参数值从字符串转换为int32”
答案 0 :(得分:2)
试试这个
您必须将字符串解析为 Int32 DataType
cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value =int.Parse(this.textBoxCodeContainer[0][1].Text);
如果用户输入有效的整数
,这应该有效例如
int Val=int.Parse("45");//Works for me
注意:这不适用于小数值
或者,如果您的Price
值包含十进制,则可以执行的操作是
cmd.Parameters["Code"].Value = Convert.ToInt32(Convert.ToDouble(this.textBoxCodeContainer[0][1].Text));
这应该有效
答案 1 :(得分:1)
更改行
cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][0].Text;
到
cmd.Parameters["Code"].Value = Convert.ToInt32(this.textBoxCodeContainer[0][0].Text);
答案 2 :(得分:1)
这一行
cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][1].Text;
需要更改为
int codeValue;
if(int.TryParse(this.textBoxCodeContainer[0][1].Text,out codeValue))
cmd.Parameters["Code"].Value = codeValue;
else
{
//do some error handling of invalid input
}
因为您正在尝试将字符串传递给类型为ineteger的参数。
答案 3 :(得分:0)
this.textBoxSubTotalContainer[0][0].Text=Convert.ToInt32(dReader["Price"].ToString());
以上陈述应该对你有帮助......
此致
阿努拉格
答案 4 :(得分:0)
根据你的代码,你没有真正提到错误引发的地方,这似乎是你问题的根源。
cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][0].Text;
您已将“Code
”声明为Integer
,但您要指定Text
值。将其转换为Int32
。
Int32 codeValue = 0;
Int32.TryParse(this.textBoxCodeContainer[0][0].Text, out codeValue);
cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value = codeValue;