2017-02-21 6 views
0

Как использовать код VB для подсчета количества записей для конкретного запроса Query или SQL?Отобразить количество записей конкретного запроса в коде VB

Я работаю над этим и пробовал разные способы, и я не получил его, чтобы показать правильные учетные записи. Это мой код, mycommand - это оператор sql.

Dim mycommand As New SqlCommand("SELECT count(*) 
    FROM ziBLE a INNER JOIN meBLE b ON a.ziLD = b.zp5 
    WHERE (b.ae" < "@ae 

    mycommand.Parameters.AddWithValue("@ae", ae_value) ' 

Dim count As Int16 = Convert.ToInt16(mycommand.ExecuteScalar()) 
      MsgBox(count.ToString()) 

или этот код в соответствии с нижерасположенным сайтом? Но дает мне сообщение об ошибке, в котором результат не может быть целым. Пожалуйста, порекомендуйте. Спасибо

Dim result as Integer = ds1.Tables("Count").Rows.Count 

http://www.vbforums.com/showthread.php?621729-RESOLVED-Trying-to-get-Row-count-from-SELECT-query

ответ

0

Вы Шоул попробовать Somthing так:

 public Int32 name(int @a) 
     { 
      SqlConnection con = new SqlConnection(string); 
      try 
      { 
       con.Open(); 
string sql = "SELECT count(*)FROM ziBLE a INNER JOIN meBLE b ON a.ziLD = b.zp5 WHERE (b.ae" < "@ae)" 
       SqlCommand cmd = new SqlCommand(sql, con); 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("@a", a); 
       return Convert.ToInt32(cmd.ExecuteScalar()); 

      } 

      catch (Exception ex) 
      { 
       throw ex; 
      } 
      finally 
      { 
       con.Close(); 
      } 
     } 

здесь это пример в C#, но вы можете попытаться преобразовать в Vb, я думаю, что это должно работать отлично, я рекомендую, чтобы вы могли сделать запрос непосредственно в базе данных, а затем в приложении youre вызовите скалярную функцию, созданную вами в db, но если вам не нравится код youre db, попробуйте соединить пример с визуальным базовым

+0

Спасибо для вашего кода, я думаю, это здорово, но у вас есть простой код, как этот ниже, который короткий, и нам не нужно писать другой оператор SQL, так как я уже написал один, но это работает? Dim result as Integer = ds1.Tables («Count»). Rows.Count – Johnseito

0

Вы могли бы сделать скалярную функцию в SQL сервере, как это:

Create Function <Function_name> (@a int) 
Returns int 
as 
Begin 
Declare @b int; 
SELECT count(*) 
FROM ziBLE a INNER JOIN meBLE b ON a.ziLD = b.zp5 
WHERE b.ae" < "@ae 
Return @ret; 
End 

, а затем в приложении вы могли бы написать что-то вроде этого:

Public Function Youre_function_name(ByVal @a as integer) as Integer 
Dim result as Int32 = 0 
Dim sql as string = "Select * From <Function_name> (@a)" 
Using conn as SqlConnection(connstring) 
Dim cmd as sqlcommand(sql,conn) 
cmd.Parameters.AddWithValue("@a", a) 
Try 
conn.Open() 
result = Convert.ToInt32(cmd.ExecuteScalar()) 
conn.Close() 
Catch ex as Exception 
Throw ex 
End Try 

Return result 

End Function 

Я считаю его более простой способ, чтобы выполнить , и результат будет быстрее, потому что запрос выполняется механизмом базы данных, он использует оперативную память, которая использует механизм базы данных, помните, что она была создана для этого (выполнение запроса), а скалярный результат - это единственные данные, которые будут быть отнесено к приложению, вместо этого, не выполняя весь процесс из приложения, и после вы можете проанализировать план выполнения, чтобы оценить, используете ли вы (*), или вместо этого используете первичный ключ для таблицы, чтобы воспользоваться преимуществами индекса кластера ... взгляните на этот код и оцените ...

+0

Хороший код, очень аккуратный. Но в моем коде VB у меня уже есть аналогичный оператор SQL для отправки только результата запроса в excel. У меня также есть функция, которая зависит от выбора пользователей, она переходит к функции с запросом и отправляет ее в excel. Это означает, что в основе вашего кода я должен поместить вашу функцию в другую функцию. Я также должен создать, как 6 функций, потому что у меня есть 6 разных запросов, которые я должен суммировать. Я все еще думаю, что этот код Dim result имеет значение Integer = ds1.Tables («Count»). Rows.Count проще, потому что у меня уже есть цикл Query, если этот код не работает. Thx – Johnseito

+0

Вместо этого я просто использую этот код (ниже) для подсчета. Это заставляет мой код работать дольше, потому что один цикл подсчитывает записи, а другой - для доступа к записям запросов. Для каждой строки As DataRow В dataset.Tables (0) .Rows cnt + = 1 Next – Johnseito

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