1

首先,如果这更像是一个问题而不是一个例子,我想道歉,但我真的迷路了。我有一个从文本文件加载信息的 Windows 窗体。在每个文本文件中都有给定州的所有市县,每个部分用.Split. 我有一个SQL Server 2008数据库,2 列,名称和类型。我想做的是获取所有信息并将其添加到单独的行中,名称列是名称,类型列是州或县。这是我如何拆分信息的方式。如何为文本中的每个条目添加一个新行?

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();
}
4

3 回答 3

1

所以,你遇到的第一个问题是你的代码没有做你认为的那样。最大的问题是你正在阅读所有文本,然后只选择它的前三个值。你没有给出您的数据的格式,但假设它看起来像这样:

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 事务中。

我会指导您查看有关 SqlTransaction 类的 MSDN 文章

它的要点是您首先声明一个事务,然后循环执行针对该事务的插入。最后,当您提交事务时,查询全部写入数据库。我这样做的原因是它会更快更安全。

于 2013-02-07T09:46:27.080 回答
0

如果将 sql 语句更改为“插入 [table] (name, type) values(@name, @type)”是否有效?与支架。

于 2013-02-05T23:40:24.117 回答
0

在 SQL Server 2008 中,您可以通过一个查询插入多行(记录)。您需要做的就是一个循环来提取行值并构造查询字符串。因此,在AddToSQL方法中,您的查询如下:

INSERT INTO [Table](Name, Type)
VALUES ('First',State1),
('Second',State2),
('Third',State3),
('Fourth',State4),

使用一个插入语句插入多条记录

于 2013-02-06T00:32:24.900 回答