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();
}
答案 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();