2014-11-07 2 views
0

Я пытаюсь передать значение из моего SQL-запроса count() в C# int Tech_Count, но оно отличается от другого. Если я только запускаю счетчик запросов, он возвращает 3, но в C# он показывает -1. Вот мой код.Значение Int в C# не соответствует значению SQL count()

 SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;Integrated Security=True; AttachDbFilename=C:\Users\anthonyhau\Documents\Lawn Mower\LawnMowerDatabase\LawnMowerDatabase\Database1.mdf"); 
     con.Open(); 
     SqlCommand cmd1 = new SqlCommand("update Tech set Customer_Count = (select IdAndCnt.cnt from (select Tech_Id,count (Tech_id) as cnt from Customers group by Tech_Id) as IdAndCnt where Tech.Tech_Id = IdAndCnt.Tech_Id)", con); 
     SqlCommand cmd = new SqlCommand("INSERT INTO Customers (First_Name, Last_Name, Street, City, State, Zip, Phone, Date_Started) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "', '" + textBox6.Text + "', '" + textBox7.Text + "', '" + dateTimePicker1.Value.ToString("MM/dd/yyyy") + "')", con); 
     SqlCommand techcnt = new SqlCommand("Select count(Tech_Id) From Tech", con); 

     cmd1.ExecuteNonQuery(); 
     cmd.ExecuteNonQuery(); 
     int Tech_Count = techcnt.ExecuteNonQuery(); 

     textBox8.Text = Tech_Count.ToString(); 


     con.Close(); 

ответ

0

Это потому, что ExecuteNonQuery не возвращает количество подобного для SELECT заявлений:

От MSDN

для UPDATE, INSERT и DELETE заявления, возвращаемое значение является количество строк, на которые влияет команда. Когда триггер существует в вставленной или обновляемой таблице , возвращаемое значение включает в себя номер строк, затронутых операциями вставки или обновления, и числом строк, затронутых триггером или триггерами. Для всех остальных типов операторов возвращаемое значение равно -1.

0

Почему вы используете ExecuteNonQuery, если вы действительно выполняете запрос? Объекты в классах довольно понятны. ExecuteNonQuery используется для обновления, удаления и вставки, чтобы он возвращал затронутые строки. Попробуйте это для размера:

SqlCommand techcnt = new SqlCommand("Select @count:=count(Tech_Id) From Tech", con); 
techcnt.Parameters.Add("@count", SqlDbType.Int).Direction = ParameterDirection.Output; 
techcnt.CommandType = CommandType.Text; 
techcnt.ExecuteScalar(); 
textBox8.Text = techcnt.Parameters["@count"].Value.ToString(); 

или что-то короче, как это:

SqlCommand techcnt = new SqlCommand("Select count(Tech_Id) From Tech", con); 

textBox8.Text = techcnt.ExecuteScalar().ToString(); 
+0

Это тоже работает. Благодарю. –

Смежные вопросы