无法将数据添加到数据库 [英] Cant add data to the database

查看:114
本文介绍了无法将数据添加到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我正在做一个控制台项目.我创建了一个名为"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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆