我是Asp.net的新手,我尝试从文件读取并存储到数据库 文件格式为:(阅读是测试,它很好)
0101;23/05/2014
0602;23/05/2014
0301;23/05/2014
1103;23/05/2014
0201;23/05/2014
1704;23/05/2014
***************
string[] lines = System.IO.File.ReadAllLines(@"C:\Users\user\Desktop\file.txt");
SqlConnection connexion = new SqlConnection(@"Data Source= (LocalDB)\v11.0;AttachDbFilename=C:\Users\user\Desktop\controle\miniprojet\miniprojet\App_Data\ariche.mdf;Integrated Security=True");
SqlCommand command = connexion.CreateCommand();
String requete = "INSERT INTO commande VALUES(@idpr,@date)";
SqlParameter paramidprod;
SqlParameter paramdate;
connexion.Open();
res.Text="Contents of file.txt = ";
foreach (string line in lines)
{
if (line.Contains('*')) break;
String[] l = line.Split(';');
paramidprod=new SqlParameter("@idpr", line.Substring(0,2));
paramdate = new SqlParameter("@date", l[1]);
command.Parameters.Add(paramidprod);
command.Parameters.Add(paramdate);
command.CommandText = requete;
command.ExecuteNonQuery();
res.Text += "<br>" + l[1] +" "+ line.Substring(0, 2);
}
connexion.Close();
connexion.Dispose();
当我运行该程序时,我遇到了问题:
The variable name '@idpr' has already been declared. Variable names must be unique
within a query batch or stored procedure.
你能否识别我失去的错误
答案 0 :(得分:2)
循环,每次循环运行时添加新参数。因此,第二次和随后的呼叫将失败。
每个循环设置新的命令参数,或者只创建一次参数,然后在每个循环中重新分配它们。
这是第二个选项 - 重用相同的参数 - 它在循环场景中的性能会比你看起来更高:
var connexion = new SqlConnection(@"Data Source=...");
var command = connexion.CreateCommand();
var requete = "INSERT INTO commande VALUES(@idpr,@date)";
// I've assumed the types - double check
var paramidprod = new SqlParameter("@idpr", SqlDbType.VarChar);
var paramdate = new SqlParameter("@date", SqlDbType.DateTime);
command.Parameters.Add(paramidprod);
command.Parameters.Add(paramdate);
command.CommandText = requete;
connexion.Open();
foreach (string line in lines)
{
if (line.Contains('*')) break;
String[] l = line.Split(';');
paramidprod.Value = line.Substring(0,2);
paramdate.Value = l[1];
command.ExecuteNonQuery();
}
connexion.Close();
connexion.Dispose();
如果要插入大量的记录,还可以考虑每1000次插入提交事务。
答案 1 :(得分:2)
请注意,在每次迭代中,您都将相同的参数插入SqlCommand
对象。在此之前你需要清除以前的那些:
foreach (string line in lines)
{
command.Parameters.Clear();