2013-08-04 5 views
5
private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlConnection conn = new SqlConnection(); 
      conn.ConnectionString = "Data Source=*******;Initial Catalog=ChatApp;User ID=Chatapplication;Password=****"; 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      string chatroomidno = textBox1.Text; 
      string chatroomname = textBox2.Text; 
      //cmd.CommandText = "Select [email protected],[email protected] from tblChatRoom"; 
      //cmd.Connection = conn; 
      SqlDataAdapter adapt = new SqlDataAdapter("Chatroomapp",conn); 
      adapt.SelectCommand.CommandType = CommandType.StoredProcedure; 
      DataSet ds=new DataSet(); 
      DataTable dt = new DataTable(); 
      adapt.SelectCommand.Parameters.Add(new SqlParameter("@ChatRoomID", SqlDbType.VarChar, 100)); 
      adapt.SelectCommand.Parameters["@ChatRoomID"].Value = chatroomidno; 
      adapt.SelectCommand.Parameters.Add(new SqlParameter("@ChatRoomName", SqlDbType.VarChar, 50)); 
      adapt.SelectCommand.Parameters["@ChatRoomName"].Value = chatroomname; 
      adapt.Fill(ds, "tblChatRoom"); 
      if (dt.Rows.Count > 0) 
      { 
       MessageBox.Show("Connection Succedded"); 
      } 
      else 
      { 
       MessageBox.Show("Connection Fails"); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error", ex.Message); 
     } 
    } 

का उपयोग कर संदेश बॉक्स में विफल रहता है, डेटाबेस में मैं सही पाया एक संग्रहीत प्रक्रिया कॉल करने के लिए, कैसे संबंध succeded संदेश बॉक्स प्राप्त करने के लिए कार्यक्रम को दूर करने केकैसे जबकि कार्यक्रम मैं केवल कनेक्शन मिल गया संकलन ado.net

उत्तर

7

ठीक है, आप ds डेटा सेट भर रहे हैं - लेकिन फिर आप पंक्तियों की उपस्थिति के लिए dt डेटा तालिका की जांच कर रहे हैं ... यह निश्चित रूप से काम नहीं करेगा!

यदि आपको केवल एक ही DataTable की आवश्यकता है - केवल उस डेटा तालिका का उपयोग करें और भरें - DataSet के ऊपरी हिस्से की आवश्यकता नहीं है। इसके अलावा, इस तरह ब्लॉकों का उपयोग कर में अपने SqlConnection और SqlCommand डाल:

using (SqlConnection conn = new SqlConnection("Data Source=*******;Initial Catalog=ChatApp;User ID=Chatapplication;Password=****")) 
using (SqlCommand cmd = new SqlCommand("Chatroomapp", conn)) 
{ 
    string chatroomidno = textBox1.Text; 
    string chatroomname = textBox2.Text; 

    SqlDataAdapter adapt = new SqlDataAdapter(cmd); 
    adapt.SelectCommand.CommandType = CommandType.StoredProcedure; 
    adapt.SelectCommand.Parameters.Add(new SqlParameter("@ChatRoomID", SqlDbType.VarChar, 100)); 
    adapt.SelectCommand.Parameters["@ChatRoomID"].Value = chatroomidno; 
    adapt.SelectCommand.Parameters.Add(new SqlParameter("@ChatRoomName", SqlDbType.VarChar, 50)); 
    adapt.SelectCommand.Parameters["@ChatRoomName"].Value = chatroomname; 

    // fill the data table - no need to explicitly call `conn.Open()` - 
    // the SqlDataAdapter automatically does this (and closes the connection, too) 
    DataTable dt = new DataTable(); 
    adapt.Fill(dt); 

    if (dt.Rows.Count > 0) 
    { 
     MessageBox.Show("Connection Succedded"); 
    } 
    else 
    { 
     MessageBox.Show("Connection Fails"); 
    } 
} 

और सिर्फ इसलिए कि आप dt.Rows शीघ्र ही वापस पंक्तियां प्राप्त होने का अर्थ यह नहीं है कि आपका कनेक्शन विफल ..... यह सिर्फ हो सकता है कि वहाँ आपकी खोज आलोचकों से मेल खाने वाली कोई पंक्ति नहीं है! कनेक्शन ठीक काम करता था - लेकिन एसक्यूएल कमांड ने किसी भी पंक्ति को वापस नहीं किया।

0

कनेक्शन विफल रहा है इसका मतलब है कि आपके प्रोग्राम और डेटाबेस के बीच कुछ गड़बड़ हुई। कोई रिकॉर्ड वापस नहीं आया इसका मतलब यह नहीं है कि कनेक्शन विफल हुआ। इसका मतलब है कि आपकी तालिका खाली है - इसमें कोई रिकॉर्ड नहीं है।

ADO.NET और stored procedures का उपयोग करके आपने जो कुछ किया है उससे थोड़ा अलग होगा। यदि आपको यह जांचने की आवश्यकता है कि कनेक्शन विफल हुआ है, तो catch भाग में लौटाए गए अपवाद के प्रकार की जांच करना बेहतर होगा।

नीचे यह है कि मैंने इसे कैसे किया होगा। मैं एक अलग विधि है कि मेरे कॉल संभाला है | बनाया होगा, और फिर अपने button1_Click मैं सिर्फ इस विधि कहा जाता है | में:

public async Task<ChatRoom> GetAsync(string chatRoomId, string chatRoomName) 
{ 
    try 
    { 
      string connectionString = ConfigurationManager.ConnectionStrings["Db"].ConnectionString; 

      using (SqlConnection sqlConnection = new SqlConnection(connectionString)) 
      { 
       await sqlConnection.OpenAsync(); 

       using (SqlCommand sqlCommand = new SqlCommand("ChatRooms_Get", sqlConnection)) 
       { 
        sqlCommand.CommandType = CommandType.StoredProcedure; 
        sqlCommand.Parameters.Add(new SqlParameter("@ChatRoomID", chatRoomId)); 
        sqlCommand.Parameters.Add(new SqlParameter("@ChatRoomName", chatRoomName)); 

        using (SqlDataReader sqlDataReader = await sqlCommand.ExecuteReaderAsync()) 
        { 
         ChatRoom chatRoom = null; 

         if (await sqlDataReader.ReadAsync()) 
         { 
           chatRoom = new ChatRoom(); 
           chatRoom.Id = sqlDataReader.GetFieldValue<string>(0); 
           chatRoom.Name = sqlDataReader.GetFieldValue<string>(1); 

           chatRooms.Add(chatRoom); 
         } 

         return chatRoom; 
        } 
       } 
      } 
    } 
    catch (Exception exception) 
    { 
      // Try checking if the connection failed here 

      throw exception; 
    } 
} 

मेरे चैट रूम domain model इस तरह देखा जा सकता था:

public class ChatRoom 
{ 
    public string Id { get; set; } 

    public string Name { get; set; } 
} 

और संग्रहीत प्रक्रिया इस तरह दिख रही है |:

CREATE PROCEDURE [dbo].[ChatRooms_Get] 
(
    @ChatRoomID VARCHAR(100), 
    @ChatRoomName VARCHAR(50) 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
      ChatRoomID, 
      ChatRoomName 
    FROM 
      tblChatRoom 
    WHERE 
      ChatRoomID = @ChatRoomID 
      AND ChatRoomName = @ChatRoomName; 
END 

GO 

और फिर बुला विधि में आप चैटरूम हो और वाई करना होगा वही जो भी आपको इसके साथ करने की ज़रूरत है। इस उदाहरण के लिए मैंने अभी जांच की है कि यह मौजूद है या नहीं:

try 
{ 
    ChatRoom chatRoom = await chatRoomRepository.GetAsync(chatRoomId, chatRoomName); 
    if (chatRoom != null) 
    { 
      MessageBox.Show("Record found"); 
    } 
    else 
    { 
      MessageBox.Show("No record found"); 
    } 
} 
catch (Exception exception) 
{ 
    throw exception; 
} 

मुझे आशा है कि इससे मदद मिल सकती है।

संबंधित मुद्दे