C# 向SQL Server表中添加多个值
首先,我想道歉,如果这是一个问题,而不是一个例子,但我真的迷失在这里。我有一个从文本文件加载信息的Windows窗体。在每个文本文件中都有给定州的所有市和县,每个部分由C# 向SQL Server表中添加多个值,c#,sql,sql-server,winforms,ado.net,C#,Sql,Sql Server,Winforms,Ado.net,首先,我想道歉,如果这是一个问题,而不是一个例子,但我真的迷失在这里。我有一个从文本文件加载信息的Windows窗体。在每个文本文件中都有给定州的所有市和县,每个部分由.Split分隔。我有一个SQLServer2008数据库,2列,名称和类型。我想做的是获取所有信息并将其添加到单独的行中,其中name列为name,type列为state或county。以下是我如何分割信息的。如何为文本中的每个条目添加新行 void PopulateZones() { ofdFile.Filter =
.Split
分隔。我有一个SQLServer2008
数据库,2列,名称和类型。我想做的是获取所有信息并将其添加到单独的行中,其中name列为name,type列为state或county。以下是我如何分割信息的。如何为文本中的每个条目添加新行
void PopulateZones()
{
ofdFile.Filter = "Text File (.txt)|*.txt|All Files (*.*|*.*";
ofdFile.FilterIndex = 1;
ofdFile.Multiselect = true;
ofdFile.FileName = String.Empty;
if (ofdFile.ShowDialog() == DialogResult.OK)
{
ofdFileLocTextBox.Text = ofdFile.FileName.ToString();
string groups = File.ReadAllText(ofdFile.FileName);
string[] parts = groups.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
stateTextBox.Text = parts[0];
citiesTextBox.Text = parts[1];
countiesTextBox.Text = parts[2];
AddtoSQL(parts[0], parts[1]);
}
}
void AddtoSQL(string cities, string counties)
{
Sqlconnection conn = new SqlConnection(connString)
Sqlcommand comm = new Sqlcommand("INSERT into [Table] (Name, Type) Values (@Name, @Type))";
comm.Parameters.Add(@Name, each line of textbox);
comm.Parameters.Add(@Type, City or County);
comm.ExecuteNonQuery();
}
如果您将sql语句更改为“插入到[表](名称,类型)值(@name,@type)”是否有效?用括号括起来。如果将sql语句更改为“插入到[表](名称,类型)值(@name,type)”是否有效?带括号。在SQL Server 2008中,您可以通过一个查询插入多行(记录)。您只需执行一个循环来提取行值并构造查询字符串。因此,在
AddToSQL
方法中,使您的查询如下:
INSERT INTO [Table](Name, Type)
VALUES ('First',State1),
('Second',State2),
('Third',State3),
('Fourth',State4),
在SQL Server 2008中,您可以通过一个查询插入多行(记录)。您只需执行一个循环来提取行值并构造查询字符串。因此,在
AddToSQL
方法中,使您的查询如下:
INSERT INTO [Table](Name, Type)
VALUES ('First',State1),
('Second',State2),
('Third',State3),
('Fourth',State4),
因此,您遇到的第一个问题是,您的代码没有按照您认为的那样执行。最大的问题是,您正在阅读所有文本,然后只选择其中的前三个值。您没有给出数据的格式,但假设它是这样的:
Scotland*Edinburgh*Midlothian*
Scotland*Perth*Perthshire*
你的代码
string groups = File.ReadAllText(ofdFile.FileName);
将整个文件读入一个字符串,使其如下所示
Scotland*Edinburgh*Midlothian*\r\nScotland*Perth*Perthshire*
因此,使用以下方法拆分它
string[] parts = groups.Split(new char[] { '*' },
StringSplitOptions.RemoveEmptyEntries);
提供一个由6部分组成的字符串数组。从中插入多行是可行的,但不会很整洁。最好是逐行读取文本文件,然后在行数组中迭代,在执行过程中拆分每个行,然后将相关部分添加到SQL中。差不多
string[] lines = System.IO.File.ReadAllLines(ofdFile.FileName);
foreach (var line in lines)
{
string[] parts = line.Split('*');
AddtoSQL(parts[0], parts[1]);
}
这应该插入所有的数据,但作为一种旁白,如果您希望同时执行多个插入,我建议将这些插入放在SQL事务中
我会指示你看一看
其要点是,首先声明一个事务,然后循环执行针对该事务的插入。最后,在提交事务时,所有查询都会大量写入数据库。我这样做的原因是它会更快、更安全。因此,您遇到的第一个问题是代码没有按照您认为的那样执行。最大的问题是您正在读取所有文本,然后只选择其中的前三个值。您没有给出数据的格式,但假设它是这样的:
Scotland*Edinburgh*Midlothian*
Scotland*Perth*Perthshire*
你的代码
string groups = File.ReadAllText(ofdFile.FileName);
将整个文件读入一个字符串,使其如下所示
Scotland*Edinburgh*Midlothian*\r\nScotland*Perth*Perthshire*
因此,使用以下方法拆分它
string[] parts = groups.Split(new char[] { '*' },
StringSplitOptions.RemoveEmptyEntries);
提供一个由6部分组成的字符串数组。从中插入多行是可行的,但不会很整洁。最好是逐行读取文本文件,然后在行数组中迭代,在执行过程中拆分每个行,然后将相关部分添加到SQL中。差不多
string[] lines = System.IO.File.ReadAllLines(ofdFile.FileName);
foreach (var line in lines)
{
string[] parts = line.Split('*');
AddtoSQL(parts[0], parts[1]);
}
这应该插入所有的数据,但作为一种旁白,如果您希望同时执行多个插入,我建议将这些插入放在SQL事务中
我会指示你看一看
其要点是,首先声明一个事务,然后循环执行针对该事务的插入。最后,在提交事务时,所有查询都会大量写入数据库。我这样做的原因是它会更快更安全。不。我可以添加单独的值。我试图同时添加多个值。否。我可以添加单独的值。我试图同时添加多个值。这不是问题的根源,但您应该在
中使用conn
和comm
块:使用(SqlConnection conn=…){using(sqlcomm=new SqlCommand(…){}}
我已经编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。您的数据在文本文件中的格式如何?你能举几行作为例子吗?这不是问题的根源,但你应该在中使用conn
和comm
块:使用(SqlConnection conn=…){using(sqlcomm=new SqlCommand(…){}
我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。您的数据在文本文件中的格式如何?你能举几行作为例子吗?