SELECT查询受影响的行数始终为

SELECT查询受影响的行数始终为

我有这段代码,它总是返回-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/

10-09 15:53