2013-06-23 2 views
0

У меня есть метод лотереи, который должен найти выигрышный билет из базы данных купленных билетов. Но я не могу отобразить результаты запроса. (Я знаю, что это не так, как лото действительно работает, я приду к рандомизации числа позже: P)Не удается отобразить результаты запроса с помощью cmd.ExecuteNonQuery в C#

draw.aspx.cs

public void LottoDraw(object sender, EventArgs e) 
{ 
    var connectionstring = "Server=C;Database=lotto;User Id=lottoadmin;Password=password;"; 

    using (var con = new SqlConnection(connectionstring)) // Create connection with automatic disposal 
    { 
     con.Open(); 

     using (var tran = con.BeginTransaction()) // Open a transaction 
     { 
      // Create command with parameters 
      string sql = 
       "SELECT TOP 1 * FROM tblLotto ORDER BY NEWID()"; 
      var cmd = new SqlCommand(sql, con); 

      cmd.Transaction = tran; 
      cmd.ExecuteNonQuery(); // Execute the query 

      tran.Commit(); // commit transaction 

      Response.Write("<br />"); 
      Response.Write("<br />"); 
      Response.Write("end..."); 
     } 
    } 
} 
+2

'ExecuteNonQuery' должен использоваться только для операторов' INSERT', 'DELETE',' UDPATE', которые не возвращают значения. Для 'SELECT' используйте' ExecuteReader() 'для возврата' SqlDataReader', поэтому вы можете ** читать ** результаты, возвращаемые из запроса. Основы ADO.NET 101 –

ответ

1

Это происходит потому, что вы используете exectue без запроса.

Для получения результатов вам необходимо либо использовать SQLReader или SqlDataAdapter

Лично я нахожу с помощью DataAdapter проще:

DataTable t = new DataTable(); 

    using (SqlConnection c = new SqlConnection(DataConnectionString)) 
    { 
     c.Open(); 
     // Create new DataAdapter 
     using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM EmployeeIDs", c))  
     { 
       // Use DataAdapter to fill DataTable 
       a.Fill(t); 
     } 
    } 

Вы можете получить доступ к данным с помощью:

if(t.Rows.Count == 1){ 

     String val0 = t.Rows[0]["VAL0"].ToString(); 
     String val1 = t.Rows[0]["VAL1"].ToString(); 
     String val2 = t.Rows[0]["VAL2"].ToString(); 
     String val3 = t.Rows[0]["VAL3"].ToString(); 
     String val4 = t.Rows[0]["VAL4"].ToString(); 
     String val5 = t.Rows[0]["VAL5"].ToString(); 
} 
+0

Спасибо, у меня возникла ошибка при попытке извлечь данные. ** В текущем контексте имя 't' не существует ** – PriceCheaperton

+0

Кажется, что ваш datatable объявляется во внутренней области, а затем доступен на внешнем экране. – SlitCanvas

+0

Я вижу .. У меня есть еще что-то в этом роде .. спасибо – PriceCheaperton