无法将数据添加到数据库 [英] Cant add data to the database
本文介绍了无法将数据添加到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好,
我正在做一个控制台项目.我创建了一个名为"worker"的类,并使用set& get方法编写了一些属性,例如"name,lastname,age".
在主体下,我创建了2个新工作人员.但是我不能将它们添加到数据库中.我被困住了,不能发怒了.如果您能帮助我,我将非常高兴.
代码是;
Hello all,
I am working on a console project. I created a class named ''worker'' and wrote some properties such as ''name,lastname,age'' with set&get methods.
Under the main I created 2 new workers. But I can not add them to the database. I am stuck and cant go furter. I would be really glad if you help me.
The code is;
Worker Andrew = new Worker();
Andrew.Name = "Andrew";
Andrew.HairColor = Color.Black;
Worker Steve = new Worker();
Steve.Name = "Steve";
Steve.HairColor = Color.Brown;
//Connection string for the database
MySqlConnection conn = new MySqlConnection("Server=localhost;Database=mydatabase;UID=root;PASSWORD=123456789;pooling=false");
MySqlCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = "insert into workerdetails (Name, HairColor) values (@name1, @color1)";
cmd.Parameters.AddWithValue("@name1", Andrew.Name);
cmd.Parameters.AddWithValue("@color1", Andrew.HairColor);
cmd.CommandText = "insert into workerdetails (Name, HairColor) values (@name2, @color2)";
cmd.Parameters.AddWithValue("@name2", Steve.Name);
cmd.Parameters.AddWithValue("@color2", Steve.MouseColor);
conn.Open();
//MySqlDataReader reader = cmd.ExecuteReader();
//cmd.ExecuteReader();
cmd.ExecuteNonQuery();
conn.Close();
推荐答案
放在主线程中是否可以工作?
Steve.MouseColor不需要强制转换吗?
祝你好运!
Would it work when placed in the main thread?
Doesn''t Steve.MouseColor need some casting?
Good luck!
私人无效btnAdd_Click(对象发送者,EventArgs e)
{
字符串tbl =学生";
字符串sqlStr = string.Concat("SELECT * FROM",tbl);
试试
{
OleDbConnection cnn =新的OleDbConnection(cnnStr);
OleDbDataAdapter oda =新的OleDbDataAdapter(sqlStr,cnn);
OleDbCommandBuilder ocb =新的OleDbCommandBuilder(oda);
cnn.Open();
//必须出现在cnn.open
之后 OleDbCommand cmd =新的OleDbCommand(sqlStr,cnn);
OleDbDataReader drr = cmd.ExecuteReader();
///////
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dr;
布尔重复=假;
而(drr.Read())
{
如果(drr ["id"].ToString().Trim()== txtIDAdd.Text.Trim())
{
重复= true;
休息;
}
}
如果(!重复)
{
ocb.QuotePrefix ="[";
ocb.QuoteSuffix =]";
oda.Fill(ds,tbl);
dt = ds.Tables [tbl];
dr = dt.NewRow();
/* dr [0] = txtIDAdd.Text.Trim();
dr [1] = txtNameAdd.Text.Trim();
dr [2] = txtMarkAdd.Text.Trim(); */
dr ["id"] = txtIDAdd.Text.Trim();
dr ["studentname"] = txtNameAdd.Text.Trim();
dr ["mark"] = Convert.ToByte(txtMarkAdd.Text.Trim());
dt.Rows.Add(dr);
oda.InsertCommand = ocb.GetInsertCommand();
如果(oda.Update(ds,tbl)== 1)
{
ds.AcceptChanges();
MessageBox.Show("Added");
}
其他
{
ds.RejectChanges();
MessageBox.Show("Rejected");
}
}
其他
MessageBox.Show("Already Exist");
drr.Close();
cnn.Close();
dt.Dispose();
ds.Dispose();
drr.Dispose();
cmd.Dispose();
ocb.Dispose();
oda.Dispose();
cnn.Dispose();
dt = null;
ds = null;
drr = null;
cmd = null;
ocb = null;
oda = null;
cnn = null;
}
catch(ex ex例外)
{
MessageBox.Show("Error:\ n \ t" + ex.Message);
}
终于
{
}
这是一种方法..如果您在sql中使用,只需将"OLedb"更改为"sql"试试吧
private void btnAdd_Click(object sender, EventArgs e)
{
string tbl = "students";
string sqlStr = string.Concat("SELECT * FROM ", tbl);
try
{
OleDbConnection cnn = new OleDbConnection(cnnStr);
OleDbDataAdapter oda = new OleDbDataAdapter(sqlStr, cnn);
OleDbCommandBuilder ocb = new OleDbCommandBuilder(oda);
cnn.Open();
// must appear after cnn.open
OleDbCommand cmd = new OleDbCommand(sqlStr, cnn);
OleDbDataReader drr = cmd.ExecuteReader();
///////
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dr;
bool duplicate = false;
while (drr.Read())
{
if (drr["id"].ToString().Trim() == txtIDAdd.Text.Trim())
{
duplicate = true;
break;
}
}
if (!duplicate)
{
ocb.QuotePrefix = "[";
ocb.QuoteSuffix = "]";
oda.Fill(ds, tbl);
dt = ds.Tables[tbl];
dr = dt.NewRow();
/*dr[0] = txtIDAdd.Text.Trim();
dr[1] = txtNameAdd.Text.Trim();
dr[2] = txtMarkAdd.Text.Trim();*/
dr["id"] = txtIDAdd.Text.Trim();
dr["studentname"] = txtNameAdd.Text.Trim();
dr["mark"] = Convert.ToByte(txtMarkAdd.Text.Trim());
dt.Rows.Add(dr);
oda.InsertCommand = ocb.GetInsertCommand();
if (oda.Update(ds, tbl) == 1)
{
ds.AcceptChanges();
MessageBox.Show("Added");
}
else
{
ds.RejectChanges();
MessageBox.Show("Rejected");
}
}
else
MessageBox.Show("Already Exist");
drr.Close();
cnn.Close();
dt.Dispose();
ds.Dispose();
drr.Dispose();
cmd.Dispose();
ocb.Dispose();
oda.Dispose();
cnn.Dispose();
dt = null;
ds = null;
drr = null;
cmd = null;
ocb = null;
oda = null;
cnn = null;
}
catch (Exception ex)
{
MessageBox.Show("Error:\n\t" + ex.Message);
}
finally
{
}
its a way ..if u use in sql ,just change "OLedb"with "sql" try it
感谢您的答复.我通过将两个工作程序添加到列表中并使用for循环将其添加到数据库中来修复了该问题.代码通过:
for(int i = 0; i< worker.Count; i ++)
{
MySqlCommand cmd = new MySqlCommand(插入workerdetails(名称,HairColor)值(@ name,@ color)",conn);
cmd.Parameters.AddWithValue("@ name",worker [i] .Name);
cmd.Parameters.AddWithValue("@ color",worker [i] .HairColor);
conn.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Close();
}
Thanks for the replies. I fixed it by adding two workers to a list and by using for loop I added them to the database. code goes by:
for (int i = 0; i < worker.Count; i++)
{
MySqlCommand cmd = new MySqlCommand("insert into workerdetails (Name, HairColor) values (@name, @color)", conn);
cmd.Parameters.AddWithValue("@name", worker[i].Name);
cmd.Parameters.AddWithValue("@color", worker[i].HairColor);
conn.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Close();
}
这篇关于无法将数据添加到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文