2014-11-06 100 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

相关问题