2013-12-08 81 views
-3

试图将数据添加到我的数据库时出现错误。 *进一步了解更多细节。将数据添加到我的数据库中C#

private void button2_Click(object sender, EventArgs e) 
{ 
      DataRow row = ds.Tables[0].NewRow(); 
      row[1] = regname.Text; 
      row[2] = regpass.Text; 
      ds.Tables[0].Rows.Add(row); 

      try 
      { 
       objConnect.UpdateDatabase(ds); 
       MaxRows = MaxRows + 1; 
       inc = MaxRows - 1; 
       MessageBox.Show("Database updated"); 
      } 
      catch (Exception err) 
      { 
       MessageBox.Show(err.Message); 
      } 
     } 

我的方法来更新数据库:

public void UpdateDatabase(System.Data.DataSet ds) 
     { 
      System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1); 
      cb.DataAdapter.Update(ds.Tables[0]); 
} 

线:

DataRow row = ds.Tables[0].NewRow(); 
特别 .NewRow();

抛出运行时错误:

型“System.NullReferenceException”未处理的异常发生在AllIn1Database.exe

我下面这个教程C# Adding to databases

任何帮助表示赞赏。

回答

0

在你的方法中,你没有创建一个对象“ds”。所以发生Null引用异常是因为你试图在非对象上运行一个方法(null)。

请阅读本教程的前几部分。这一个解释,其中“DS”来源于: http://www.homeandlearn.co.uk/csharp/csharp_s12p7.html

+0

如果' ds'被声明为超出范围? –

+0

这样做完全没有。错误现在说'无法实例化对象,以及之前的错误。 – user3079557

0

问题:那是因为你已经从index 1创造了创建的coumns但却行列从index 0开始。

解决方案:您需要创建index 0row列。

试试这个:

DataRow row = ds.Tables[0].NewRow(); 
row[0] = regname.Text; 
row[1] = regpass.Text; 
ds.Tables[0].Rows.Add(row); 
+0

Unfortuunatley没有工作,我没有料到它,因为行[0 ]涉及数据库注册表的ID。 – user3079557

1

我遵循相同的教程,我还停留在相同的部分,也许需要一些帮助。这个问题似乎与DatabaseConnection类中的DataAdapter有关。我得到的错误是“名‘da_1’在目前情况下不存在:

public System.Data.DataSet MyDataSet() 
{ 
    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon); 

    con.Open(); 

    System.Data.SqlClient.SqlDataAdapter da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con); 

    System.Data.DataSet dat_set = new System.Data.DataSet(); 
    da_1.Fill(dat_set, "Table_Data_1"); 
    con.Close(); 

    return dat_set; 
} 

public void UpdateDatabase(System.Data.DataSet ds) 
{ 
    System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1); 

    cb.DataAdapter.Update(ds.Tables[0]); 

我设法解决这个问题由我的DatabaseConnection类的顶部添加

public static System.Data.SqlClient.SqlDataAdapter da_1;