将感谢有关如何将数据插入数据库的指南。我正在从SQL数据库中获取值,并将其插入到MYSQL数据库中。
这就是我的操作方式。但是我不断收到重复条目错误。请您告诉我我做错了什么吗?或提出更好的方法?
SqlConnection conn = new SqlConnection();
string strSQL = SELECT Name, Account Number FROM customers;
SqlCommand icmd = new SqlCommand(strSQL, conn);
SqlDataReader ids = icmd.ExecuteReader();
while (ids.Read())
{
string customername = ids["Name"].ToString();
string customerAcc = ids["AccountNumber"].ToString();
MySqlConnection conns = new MySqlConnection
string strMySQL = insert into customer(CusName, CusAcc) Values('" + customername + "','" + customerAcc + "' )";
MySQLCommand icmds = New MySQLCommand(strMYSQL, conns)
MySQLReader reader = icmds.ExecuteReader();
}
答案 0 :(得分:1)
当您的数据库表在一个或多个列上具有唯一索引并且您尝试添加表列中已经存在的值时,将触发错误消息。当然,这是一个设计决策,您需要了解是否确实需要在这些列上具有唯一索引。如果不需要它们,则可以使用MySql管理工具将其删除。
在说完处理数据库任务时,您需要采用其他方法。最重要的是使用始终参数化的查询。这些查询有助于数据库引擎优化数据访问,避免sql注入和简单的分析错误。第二重要的事情是尽快关闭并释放连接,以释放服务器和客户端上的资源。
这里是您的代码问题的可能解决方案,我在注释行中突出了处理数据库任务时应遵循的良好做法。
// Always enclose the connection objects in a using statement to free resources
using(SqlConnection conn = new SqlConnection(.....connectionstringhere....))
{
conn.Open();
string strSQL = "SELECT Name, Account Number FROM customers";
SqlCommand icmd = new SqlCommand(strSQL, conn);
SqlDataReader ids = icmd.ExecuteReader();
// Prepare the MySqlConnection, as above inside a using statement
using(MySqlConnection conns = new MySqlConnection(....as above....))
{
conns.Open();
// Prepare the command only once outside the inner loop and use parameters
string strMySQL = @"insert into customer(CusName, CusAcc)
Values(@name, @acc)";
MySQLCommand icmds = New MySQLCommand(strMYSQL, conns)
icmds.Parameters.Add("@name", MySqlDbType.VarChar);
icmds.Parameters.Add("@acc", MySqlDbType.VarChar);
while (ids.Read())
{
// At each loop set the parameters new values and execute the command
// Note that I use the values extracted at each loop from the
// SqlDataReader
icmds.Parameters["@name"].Value = ids["Name"].ToString();
icmds.Parameters["@acc"].Value = ids["AccountNumber"].ToString();
icmds.ExecuteNonQuery();
}
} // Here the MySqlConnection is closed and disposed
} // Here the SqlConnection is closed and disposed
答案 1 :(得分:0)
检查是否已为表 customer 上的列 CusName 和 CusAcc 创建了复合唯一索引。在这种情况下,MYSQL阻止插入重复的行。
您可以了解有关此Linkify Plus Plus
的更多信息