C# 如何使用异常更新数据库中的表
我尝试更新C# 如何使用异常更新数据库中的表,c#,sql-server,database,C#,Sql Server,Database,我尝试更新 Company_name varchar(40) not null, Product_unit varchar(20) not null, Product_quantity int not null, Product_Barcode varchar(100) null, Product_expire_date datetime not null, DurationBeforeWarningsInDays int not null, DecreasingAmountBeforeWarn
Company_name varchar(40) not null,
Product_unit varchar(20) not null,
Product_quantity int not null,
Product_Barcode varchar(100) null,
Product_expire_date datetime not null,
DurationBeforeWarningsInDays int not null,
DecreasingAmountBeforeWarningsInUnit int not null,
Product_Purchase_price float not null,
Product_Price float not null
在数据库的product表中,从datagridview单元格中获取字段值,并将其转换为数据库中的等效值,但我发现了此异常
(无法识别多部分标识符“m.Medicine_禁忌症”)
绑定。)
当我的程序实现cmd.ExecuteNonQuery()时代码>
声明,我不知道原因
private void Update_Click(object sender, EventArgs e)
{
string strconn = @"Server=.\SQLEXPRESS;initial catalog=PharmacyV2;integrated security=true;";
SqlConnection conn = new SqlConnection(strconn);
string mysql = " UPDATE p set p.Company_name=@C_name,p.Product_unit=@unit,p.Product_quantity=@quantity,p.Product_Barcode=@Barcode,p.DecreasingAmountBeforeWarningsInUnit=@warningAmount,p.Product_expire_date=@EDate,p.DurationBeforeWarningsInDays=@warningTime,p.Product_Purchase_price=@P_price,p.Product_Price=@price ,m.Medicine_contraindications=@M_contr ,m.Medicine_sideEffects=@M_sid from Product p join Medicine m on p.Product_id=m.Product_id where p.Product_name=@name;";
SqlCommand cmd = new SqlCommand(mysql, conn);
conn.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
cmd.Parameters.Add("@name", SqlDbType.NVarChar);
cmd.Parameters["@name"].Value = dataGridView1.Rows[i].Cells[0].Value.ToString();
cmd.Parameters.Add("@C_name", SqlDbType.NVarChar);
cmd.Parameters["@C_name"].Value = dataGridView1.Rows[i].Cells[1].Value.ToString();
cmd.Parameters.Add("@unit", SqlDbType.NVarChar);
cmd.Parameters["@unit"].Value = dataGridView1.Rows[i].Cells[2].Value.ToString();
cmd.Parameters.Add("@quantity", SqlDbType.Int);
cmd.Parameters["@quantity"].Value = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);
cmd.Parameters.Add("@Barcode", SqlDbType.NVarChar);
cmd.Parameters["@Barcode"].Value = dataGridView1.Rows[i].Cells[4].Value.ToString();
cmd.Parameters.Add("@warningAmount", SqlDbType.Int);
cmd.Parameters["@warningAmount"].Value = Convert.ToInt32(dataGridView1.Rows[i].Cells[5].Value);
cmd.Parameters.Add("@EDate", SqlDbType.DateTime);
cmd.Parameters["@EDate"].Value = Convert.ToDateTime(dataGridView1.Rows[i].Cells[6].Value);
cmd.Parameters.Add("@warningTime", SqlDbType.Int);
cmd.Parameters["@warningTime"].Value = Convert.ToInt32(dataGridView1.Rows[i].Cells[7].Value);
cmd.Parameters.Add("@P_price", SqlDbType.Decimal);
cmd.Parameters["@P_price"].Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[8].Value);
cmd.Parameters.Add("@price", SqlDbType.Decimal);
cmd.Parameters["@price"].Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[9].Value);
ArrayList arr = new ArrayList();
arr.Add(TextBox1.Text);
ArrayList arr1 = new ArrayList();
arr1.Add(TextBox2.Text);
cmd.Parameters.AddWithValue("@M_contr",Convert.ToString(arr1));
cmd.Parameters.AddWithValue("@M_sid", Convert.ToString(arr));
cmd.ExecuteNonQuery();
private void Update\u单击(对象发送方,事件参数e)
{
字符串strconn=@“服务器=。\SQLEXPRESS;初始目录=PharmacyV2;集成安全性=true;”;
SqlConnection conn=新的SqlConnection(strconn);
字符串mysql="更新p集p.Company\u name=@C\u name,p.Product\u unit=@unit,p.Product\u quantity=@quantity,p.Product\u Barcode=@Barcode,p.DecreasingMountBefore WarningInUnit=@warningAmount,p.Product\u expire\u date=@EDate,p.DurationBefore WarningInDays=@Warnings=@warningTime,p.Product\u Purchase\u price=@p.Product\u price=@p.Product\u price=@price,m.Medicine=@price,m.Medicine=@m_副作用=@M_sid来自产品p在p.Product_id=M.Product_id上加入药物M,其中p.Product_name=@name;“;
SqlCommand cmd=新的SqlCommand(mysql,conn);
conn.Open();
对于(int i=0;i
我已经多年没有使用SQL Server了,但我可以清楚地看到您的查询中缺少的信息
您正在尝试更新表m,但您的更新包含产品p
在这里签出语法
您正试图用一条Update语句更新两个表,您需要将其分解为两条Update语句,并将这两条Update语句放入一个事务中,这样您就可以在出错时回滚整个事务,这样您的数据就不会处于半完成状态。您可以这样做
BEGIN TRANSACTION
UPDATE p
set p.Company_name=@C_name,
p.Product_unit=@unit,
p.Product_quantity=@quantity,
p.Product_Barcode=@Barcode,
p.DecreasingAmountBeforeWarningsInUnit=@warningAmount,
p.Product_expire_date=@EDate,
p.DurationBeforeWarningsInDays=@warningTime,
p.Product_Purchase_price=@P_price,
p.Product_Price=@price
from Product p join Medicine m
on p.Product_id=m.Product_id
where p.Product_name=@name;
UPDATE m
set m.Medicine_contraindications=@M_contr ,
m.Medicine_sideEffects=@M_sid
from Product p join Medicine m
on p.Product_id=m.Product_id
where p.Product_name=@name;
COMMIT TRANSACTION
为什么要更新联接?因为我需要根据Product表中的Product_name字段更新Medicine表中的2个字段,在那里进行单独更新怎么样?当你说flied时,是指字段吗?你确定有一个名为该字段的列吗?如果有,你确定数据类型匹配吗?