C# 使用Where子句C构建动态SQL INSERT查询
我使用的是SQL Server 2012和VS 2013。我有这样的表模式C# 使用Where子句C构建动态SQL INSERT查询,c#,sql-server,visual-studio,C#,Sql Server,Visual Studio,我使用的是SQL Server 2012和VS 2013。我有这样的表模式 [dbo].[Accounts] ([AccntName], [AccntCrVal], [AccntDrVal]) using (SqlConnection conn = new SqlConnection(conStr)) { insrtcmd = new SqlCommand(); insrtcmd.Connection = conn; if (comBoxBalType.Text ==
[dbo].[Accounts] ([AccntName], [AccntCrVal], [AccntDrVal])
using (SqlConnection conn = new SqlConnection(conStr))
{
insrtcmd = new SqlCommand();
insrtcmd.Connection = conn;
if (comBoxBalType.Text == "Cr")
{
insrtcmd.CommandText = @"INSERT INTO Accoutns(AccntCrVal) VALUES (@bal) Where(AccntName=@acntName)";
insrtcmd.Connection = conn;
insrtcmd.Parameters.AddWithValue("@acntName", acntName);
insrtcmd.Parameters.AddWithValue("@bal", bal);
conn.Open();
insrtcmd.ExecuteNonQuery();
}
else if (comBoxBalType.Text == "Dr")
{
insrtcmd.CommandText = @"INSERT INTO Accoutns(AccntDrVal) VALUES (@AccntDrVal) Where (AccntName=@prmSlctAcntName)";
insrtcmd.Connection = conn;
insrtcmd.Parameters.AddWithValue("@prmSlctAcntName", comBoxSlctAcnt.Text);
insrtcmd.Parameters.AddWithValue("@AccntDrVal", textBoxBal);
conn.Open();
insrtcmd.ExecuteNonQuery();
}
else
{
MessageBox.Show("Please Enter Values and Select the Balance Type [ Dr | Cr ] ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我想根据条件构建一个动态sql查询。用户将选择账户名并输入余额,然后选择余额类型贷方或借方。现在我想,如果用户选择信用值,则转到信用列,反之亦然。用户将仅选择已在accounts表中输入的AccountName。
目前我是这样做的
[dbo].[Accounts] ([AccntName], [AccntCrVal], [AccntDrVal])
using (SqlConnection conn = new SqlConnection(conStr))
{
insrtcmd = new SqlCommand();
insrtcmd.Connection = conn;
if (comBoxBalType.Text == "Cr")
{
insrtcmd.CommandText = @"INSERT INTO Accoutns(AccntCrVal) VALUES (@bal) Where(AccntName=@acntName)";
insrtcmd.Connection = conn;
insrtcmd.Parameters.AddWithValue("@acntName", acntName);
insrtcmd.Parameters.AddWithValue("@bal", bal);
conn.Open();
insrtcmd.ExecuteNonQuery();
}
else if (comBoxBalType.Text == "Dr")
{
insrtcmd.CommandText = @"INSERT INTO Accoutns(AccntDrVal) VALUES (@AccntDrVal) Where (AccntName=@prmSlctAcntName)";
insrtcmd.Connection = conn;
insrtcmd.Parameters.AddWithValue("@prmSlctAcntName", comBoxSlctAcnt.Text);
insrtcmd.Parameters.AddWithValue("@AccntDrVal", textBoxBal);
conn.Open();
insrtcmd.ExecuteNonQuery();
}
else
{
MessageBox.Show("Please Enter Values and Select the Balance Type [ Dr | Cr ] ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
但我不想这样做。谢谢因为您已经在表中输入了数据,所以需要更新记录。使用当前设置,您可以执行以下操作
using (SqlConnection conn = new SqlConnection(conStr))
{
var accountName = comBoxSlctAcnt.Text;
var balance = textBoxBal.Text;
var balanceType = comBoxBalType.Text;
if (balanceType == "Cr" || balanceType == "Dr")
{
insrtcmd = new SqlCommand();
insrtcmd.CommandText = string.Format(
@"UPDATE Accoutns SET {0} = @bal Where AccntName = @acntName",
balanceType == "Cr" ? "AccntCrVal" : "AccntDrVal");
insrtcmd.Connection = conn;
insrtcmd.Parameters.AddWithValue("@acntName", accountName);
insrtcmd.Parameters.AddWithValue("@bal", balance);
conn.Open();
insrtcmd.ExecuteNonQuery();
}
else
{
MessageBox.Show("Please Enter Values and Select the Balance Type [ Dr | Cr ] ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
但是,您应该使用复选框或下拉列表来选择事务类型,并在使用它们之前验证所有值。捕获异常(如果有)。或者,您可以编写一个小的存储过程,并将条件逻辑从C移动到SQL。由于您已经在表中存储了数据,因此需要更新记录。使用当前设置,您可以执行以下操作
using (SqlConnection conn = new SqlConnection(conStr))
{
var accountName = comBoxSlctAcnt.Text;
var balance = textBoxBal.Text;
var balanceType = comBoxBalType.Text;
if (balanceType == "Cr" || balanceType == "Dr")
{
insrtcmd = new SqlCommand();
insrtcmd.CommandText = string.Format(
@"UPDATE Accoutns SET {0} = @bal Where AccntName = @acntName",
balanceType == "Cr" ? "AccntCrVal" : "AccntDrVal");
insrtcmd.Connection = conn;
insrtcmd.Parameters.AddWithValue("@acntName", accountName);
insrtcmd.Parameters.AddWithValue("@bal", balance);
conn.Open();
insrtcmd.ExecuteNonQuery();
}
else
{
MessageBox.Show("Please Enter Values and Select the Balance Type [ Dr | Cr ] ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
但是,您应该使用复选框或下拉列表来选择事务类型,并在使用它们之前验证所有值。捕获异常(如果有)。或者,您可以编写一个小的存储过程,并将条件逻辑从C移到SQL。Yes。你能提供代码吗@0\uuuuuuuuuuuu0无法定义动态insert语句。有其他方法吗@JackINSERT没有WHERE子句——如果您想插入,那么就执行insert,否则就不要执行它……是的。你能提供代码吗@0\uuuuuuuuuuuu0无法定义动态insert语句。有其他方法吗@JackINSERT没有WHERE子句-如果您想插入-那么执行insert,否则就不要执行它…如果它解决了您的问题。如果它解决了你的问题,你可以把它标记为答案。你可以打标记作为答案。