gpt4 book ai didi

c# - 从 varchar 到 int 的转换失败,ado.net

转载 作者:行者123 更新时间:2023-11-29 11:40:02 25 4
gpt4 key购买 nike

我正在 C# 中通过 ado.net 使用 sql 数据库,并且我正在尝试传递以下更新命令:

cmd.CommandText = @"UPDATE VehicleContract SET regNr='@reg', assoc_id='@assort', percentage='@perc', vehicleType='@type', trailerNr='@trailer' WHERE contractId='@id'";
cmd.Parameters.AddWithValue("@id", id);

id 为 int。我把它当作一个 int 来读。我什至做了一个 int.Parse(txtbox.text) ,一切都很好。但是当我在框中插入所有值时,请按提交。我收到转换错误,说它无法将 '@id' varchar 转换为 int...这没有任何意义

我有什么具体做得不对的地方吗?需要更多详细信息吗?

The whole code:
if (tbid.Text == "" || tbper.Text == "" || tbas.Text == "" || tbvt.Text == "")
{
MessageBox.Show("All fields must be filled ");
return;
}
if (tbreg.Text == "" && tbtn.Text == "")
{
MessageBox.Show("Fill at least one from: Registration nr or trailer nr");
return;
}
int id = 0;
string reg = "";
int assort = 0;
int perc = 0;
string type = "";
int trailer = 0;
try
{
id = int.Parse(tbid.Text);
Console.Write(id);
if (tbreg.Text != "")
{
reg = tbreg.Text;
}
assort = int.Parse(tbas.Text);
perc = int.Parse(tbper.Text);
type = tbvt.Text;
if (tbtn.Text != "")
{
trailer = int.Parse(tbtn.Text);
}
}
catch (Exception ee)
{
MessageBox.Show("id, assoc, perc and trailer nr must be integers ");
return;
}
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();

con.ConnectionString = "Data Source=.;initial Catalog=Lab5;integrated security=true";
con.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"UPDATE VehicleContract SET regNr='@reg', assoc_id='@assort', percentage='@perc', vehicleType='@type', trailerNr='@trailer' WHERE contractId='@id'";
cmd.Parameters.AddWithValue("@id", id);
if (reg == "")
{
cmd.Parameters.AddWithValue("@reg", DBNull.Value);
}
else
{
cmd.Parameters.AddWithValue("@reg", reg);
}
cmd.Parameters.AddWithValue("@assort", assort);
cmd.Parameters.AddWithValue("@perc", perc);
cmd.Parameters.AddWithValue("@type", type);
if (trailer == 0)
{
cmd.Parameters.AddWithValue("@trailer", DBNull.Value);
}
else
{
cmd.Parameters.AddWithValue("@trailer", trailer);
}
cmd.Connection = con;
SqlDataReader sdr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(sdr);

childgrid.DataSource = dt;
sdr.Close();
con.Close();

最佳答案

当您在查询中使用 WHERE Con​​tractId='@id' 时,您会将 int contractId 列与字符串 '@id' 进行比较> 值(value)。

您需要使用WHEREcontractId=@id

因此请删除 @id 和其他参数周围的单引号。

关于c# - 从 varchar 到 int 的转换失败,ado.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35949810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com