我有这段代码,它总是返回-1。我有三个表(图片更具启发性):
我想查看该行是否已经在ReservationDetails表中,以及是否不插入该行。
try
{
SqlConnection conn = new SqlConnection...
SqlCommand slct = new SqlCommand("SELECT * FROM ReservationDetails WHERE rID=@rID AND RNumber=@RNumber", conn);
slct.Parameters.AddWithValue("@rID", (int)comboBox1.SelectedValue);
slct.Parameters.AddWithValue("@RNumber", dataGridView1.SelectedRows[0].Cells[0].Value);
int noRows;//counts if we already have the entry in the table
conn.Open();
noRows = slct.ExecuteNonQuery();
conn.Close();
MessageBox.Show("The result of select="+noRows);
if (noRows ==0) //we can insert the new row
最佳答案
你应该
1)将您的TSQL更改为
SELECT COUNT(*) FROM ReservationDetails WHERE ...
(最好还是使用
IF EXISTS
...)2)并使用
ExecuteScalar()
:noRows = (int) slct.ExecuteScalar();
另外:您将需要使用事务(或其他原子技术),否则有人可以在测试之间插入一行并尝试将其插入...
综上所述,最好创建一个给定参数的存储过程,自动测试并插入表中,如果成功则返回
1
,如果行已存在则返回0
。关于c# - C#-SELECT查询受影响的行数始终为-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10053037/