2014-11-06 126 views
0

我一直試圖使用C#語言將數據從Visual Studio添加到SQL服務器,但它顯示錯誤,當我按下添加按鈕。連接類如下所示:錯誤ExecuteNonQuery:連接屬性尚未初始化,當我單擊插入按鈕

class Globalconnection 
{ 
    public static SqlConnection cn; 
    public static string strServer = ""; 
    public static string strDatabase = ""; 
    public static string strUID = ""; 
    public static string strPWD = ""; 

    public static void SetupConnection() 
    { 
     cn = new SqlConnection("Server=" + strServer + "; Database=" + strDatabase + "; UID=" + strUID + ";PWD=" + strPWD); 
     cn.Open(); 
    } 
} 

在這個類中,大多數SQL命令都是爲了將​​數據插入SQL而給出的。

class DACLASS 
{ 
    public static string strUID = ""; 
    public static string strPWD = ""; 
    public static string strNPWD = ""; 
    public static DataTable AccessData() 
    { 
     SqlDataAdapter da = new SqlDataAdapter("Select * from Users where Username='" + strUID + "' and Password='" + strPWD + "'", Globalconnection.cn); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "USERS"); 
     return ds.Tables[0]; 
    } 

    public static void addStatue(string ID, string Name) 
    { 
     string strAddStatue = "Insert into Statues VALUES (@ID, @Name)"; 

     SqlCommand cmdAddStatue = new SqlCommand(strAddStatue, Globalconnection.cn); 

     cmdAddStatue.Parameters.AddWithValue("@ID", ID); 
     cmdAddStatue.Parameters.AddWithValue("@Name", Name); 
     cmdAddStatue.ExecuteNonQuery(); 
    } 
} 

以下命令來自「ADD」按鈕。

private void txtADD_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     if (txtID.Text == "" || txtName.Text == "" || txtSize.Text == "" || txtTCP.Text == "" || txtMP.Text == "") 
     { 
      MessageBox.Show("ID, Name, Size, Total Cost Price and Marked Price are Mandatory", "Handicrafts"); 
     } 
     else 
     { 
      DACLASS.addStatue(txtID.Text, txtName.Text); 
      MessageBox.Show("Statue Added", "Handicraft"); 
      btnClear_Click(sender, e); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Handicrafts"); 
     btnClear_Click(sender, e); 
    } 
} 

當我把空值顯示在消息框,但是當我插入正確的價值觀,我得到這個錯誤

的ExecuteNonQuery:Connection屬性尚未初始化

回答

0

添加此行你的構造函數,或絕望的txtADD_Click()方法

Globalconnection.SetupConnection(); 

你已經做好了所有的工作,向計算機解釋如何打開連接,你只是從來沒有真正告訴它要做到這一點:)

希望它可以幫助..

0

它似乎像你從來沒有實際上運行了GlobalConnection類中的設置連接方法。也許你會更好地實現你的sql連接的單例模式。

3

您需要打開SqlConnection,然後從SqlCommand的實例調用ExecuteNonQuery方法。致電ExecuteNonQuery後,SqlConnection必須關閉。我建議改變Globalconnection如下

class Globalconnection 
{ 
    public static string strServer = ""; 
    public static string strDatabase = ""; 
    public static string strUID = ""; 
    public static string strPWD = ""; 
    public static SqlConnection cn = new SqlConnection("Server=" + strServer + "; Database=" + strDatabase + "; UID=" + strUID + ";PWD=" + strPWD); 
} 

然後用using statementaddStatue方法,以確保執行cmdAddStatueSqlConnection關閉。

public static void addStatue(string ID, string Name) 
{ 
    string strAddStatue = "Insert into Statues VALUES (@ID, @Name)"; 

    using (var connection1 = Globalconnection.cn) 
    { 
     using (var cmdAddStatue = new SqlCommand(strAddStatue, connection1)) 
     { 
      cmdAddStatue.Parameters.AddWithValue("@ID", ID); 
      cmdAddStatue.Parameters.AddWithValue("@Name", Name); 

      connection1.Open(); 
      cmdAddStatue.ExecuteNonQuery(); 
     } 
    } 
} 
+0

您需要添加'connection1.Open();' – juharr 2014-11-06 16:56:00

+0

感謝您的更正@juharr,我編輯了我的答案。 – ekad 2014-11-06 16:57:31

+0

+1用於'使用'語句。處理ADO.Net的正確方法。 – juharr 2014-11-06 16:58:15

相關問題