2011-12-21 6 views
0

Вот часть кода, которую я использую, чтобы получить счет из столбца nos.Использование count() в SQL Server

//get max count of orders on server .2 
    public int getmaxcountfornos(string caseno,TextBox TextBox3) 
    { 
     int count2 = 0; 
     try 
     { 
      String dd_webCofig = ConfigurationManager.ConnectionStrings["counton140"].ConnectionString; 
      OdbcConnection ddlistconn = new OdbcConnection(dd_webCofig); 
      ddlistconn.Open(); 

      string cnt_2 = "select count(nos) from training_jud.orders where [email protected] and [email protected]"; 
      OdbcCommand ddlistCmd_2 = new OdbcCommand(cnt_2, ddlistconn); 

      ddlistCmd_2.Parameters.AddWithValue("b", caseno); 
      ddlistCmd_2.Parameters.AddWithValue("c", Convert.ToDateTime(TextBox3.Text).ToString("yyyy-MM-dd")); 

      count2 = (int)ddlistCmd_2.ExecuteScalar(); 
     } 

     catch (Exception ee) 
     { 
      HttpContext.Current.Response.Write(ee.Message); 
     } 
     return count2; 
    } 

Здесь я получаю исключение, как

Указанной гипсе не является действительным.

Может ли кто-нибудь помочь мне разобраться с этой проблемой?

ответ

1

Попробуйте это:

//get max count of orders on server .2 
public int getmaxcountfornos(string caseno,TextBox TextBox3) 
{ 
    int count2 = 0; 
    try 
    { 
     String dd_webCofig = ConfigurationManager.ConnectionStrings["counton140"].ConnectionString; 
     OdbcConnection ddlistconn = new OdbcConnection(dd_webCofig); 
     ddlistconn.Open(); 

     string cnt_2 = "select count(nos) from training_jud.orders where [email protected] and [email protected]"; 
     OdbcCommand ddlistCmd_2 = new OdbcCommand(cnt_2, ddlistconn); 

     ddlistCmd_2.Parameters.AddWithValue("**@b**", caseno); 
     ddlistCmd_2.Parameters.AddWithValue("**@c**", Convert.ToDateTime(TextBox3.Text).ToString("yyyy-MM-dd")); 

     count2 = **Convert.ToInt32**(ddlistCmd_2.ExecuteScalar()); 
    } 

    catch (Exception ee) 
    { 
     HttpContext.Current.Response.Write(ee.Message); 
    } 
    return count2; 
} 
0
count2 = int.Parse(ddlistCmd_2.ExecuteScalar().ToString()); 

используя выше вместо

count2 = (int)ddlistCmd_2.ExecuteScalar(); 

решить эту проблему.

+1

Вероятно потому, что результат 'ExecuteScalar' не является внутр. Это может быть длинный или маленький. В этом случае бросок не будет работать. Прохождение через строку (не делайте этого) работает вокруг проблемы. Узнайте, какой тип фактически возвращается из выполнения вашего запроса. –

0

Пока ваш код будет хорошо, однако вы не могли бы попробовать с ниже части кода, благодаря

string cnt_2 = "select count(nos) as OrderCount from training_jud.orders where [email protected] and [email protected]"; 
OdbcCommand ddlistCmd_2 = new OdbcCommand(cnt_2, ddlistconn); 

ddlistCmd_2.Parameters.AddWithValue("@b", caseno); 
ddlistCmd_2.Parameters.AddWithValue("@c", Convert.ToDateTime(TextBox3.Text).ToString("yyyy-MM-dd")); 

count2 = Convert.ToInt32(ddlistCmd_2.ExecuteScalar());