Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向SQL Server表中添加多个值_C#_Sql_Sql Server_Winforms_Ado.net - Fatal编程技术网

C# 向SQL Server表中添加多个值

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 =

首先,我想道歉,如果这是一个问题,而不是一个例子,但我真的迷失在这里。我有一个从文本文件加载信息的Windows窗体。在每个文本文件中都有给定州的所有市和县,每个部分由
.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(…){}
我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。您的数据在文本文件中的格式如何?你能举几行作为例子吗?