为什么我输入的数据没有存储在数据库中?

时间:2014-03-28 09:29:56

标签: c# asp.net sql-server

public List<TextBox> _textBoxes = new List<TextBox>();

protected void btmSubmit_Click1(object sender, EventArgs e)
{
    dbDataItem();
}
public void dbDataItem()
{
    dc.cnn.Open();
    _textBoxes = getTextBox();
    //foreach (TextBox text in _textBoxes)
    //{
    //    _textBoxes.Add(text.Text.Trim());
    //    //StoreValue(text.Text);
    //}
    foreach (TextBox textBox in _textBoxes)
    {
        //TextBox txt = new TextBox();

        //txt.ID = Panel2.FindControl("textBox").ToString();
        string value = textBox.Text;

        string query = "select name from DataItem where name = '" + value + "'";
        SqlCommand cmd = new SqlCommand(query, dc.cnn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);            
        int count = dt.Rows.Count;


        if (count == 0)
        {
            int i = MaxCode1();
            SqlCommand cmd2 = new SqlCommand("insert into DataItem (code,name) values (@code,@name)", dc.cnn);
            cmd2.Parameters.AddWithValue("@code", i);
            cmd2.Parameters.AddWithValue("@name", value);
            SqlDataAdapter da2 = new SqlDataAdapter(cmd2);
            DataTable dt2 = new DataTable();
            da2.Fill(dt2);
            dc.cnn.Close();
        }
        else
        {

            Response.Write("<script language='javascript'>alert('This DataItem already exist in database');</script>");

        }
    }

    dc.cnn.Close();
}

2 个答案:

答案 0 :(得分:1)

调用SqlDataAdapter.Fill执行INSERT命令不正确。 Fill方法用于使用SELECT语句从数据库中检索记录。在您的代码中,INSERT语句作为适配器的SelectCommand传递,并在您调用Fill时执行,以便将记录添加到数据库表。但是 DataTable代码对象中没有返回值,因为Fill方法使用的SelectCommand没有分配给它的SELECT语句。

您需要拆分两个操作,首先是INSERT语句上的ExecuteNonQuery,然后使用正确的SELECT语句创建适配器

SqlCommand cmd2 = new SqlCommand("insert into DataItem (code,name) values (@code,@name)", dc.cnn);
cmd2.Parameters.AddWithValue("@code", i);
cmd2.Parameters.AddWithValue("@name", value);
cmd2.ExecuteNonQuery()

SqlDataAdapter da2 = new SqlDataAdapter("SELECT * FROM DataItem");
DataTable dt2 = new DataTable();
da2.Fill(dt2);

答案 1 :(得分:1)

你不能运行cmd2。

设置参数后,按以下方式运行:

cm2.ExecuteNonQuery();

因此,您的代码如下所示:

SqlCommand cmd2 = new SqlCommand("insert into DataItem (code,name) values (@code,@name)", dc.cnn);
cmd2.Parameters.AddWithValue("@code", i);
cmd2.Parameters.AddWithValue("@name", value);
cmd2.ExecuteNonQuery();
dc.cnn.Close();