我有一个如下所示的字符串
ABC PQR 123 R1234 TREW
我需要将其拆分并将单个值放入数据库中。
数据库表看起来像这样
Col1 Col2 Col3 Col4 Col5 Col6
ABC PQR 123 R1234 TREW
我可以使用split函数在空格处分割,但有时候会有多个空格,然后我想在表格中插入一个空白,所以在上面的字符串中,我在123和R1234之间有两个空格。我需要在Col4中插入空格来表示字符串的那一部分没有任何内容。可以有两个以上的空格,这意味着Col4和Col5都可以为空,所以每当有两个空格时,我需要在相应的列中输入空格,如果有一个空格,那么我需要在数据库中输入值。我怎样才能做到这一点。
任何帮助将不胜感激。
答案 0 :(得分:1)
因此,只要值本身不包含空格,就会有空格分隔的列,而不是问题。您只需使用String.Split(new[]{' '}, StringSplitOptions.None)
:
string[] allFields = str.Split(new[]{' '}, StringSplitOptions.None);
现在string[]
中的每个字符串都是表格的列值。如果有一个空字符串,则表示该列的值也为空。
所以假设sql-server:
string[] allFields = "ABC PQR 123 R1234 TREW".Split(new[] { ' ' }, StringSplitOptions.None);
if(allFields.Length >= 6) // == 6 if more values than columns is exceptional
{
string sql = @"INSERT INTO table(Col1,Col2,Col3,Col4,Col5,Col6)
VALUES(@Col1,@Col2,@Col3,@Col4,@Col5,@Col6)";
using(var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using (var cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@Col1", allFields[0]);
cmd.Parameters.AddWithValue("@Col2", allFields[1]);
cmd.Parameters.AddWithValue("@Col3", allFields[2]);
cmd.Parameters.AddWithValue("@Col4", allFields[3]);
cmd.Parameters.AddWithValue("@Col5", allFields[4]);
cmd.Parameters.AddWithValue("@Col6", allFields[5]);
con.Open();
int inserted = cmd.ExecuteNonQuery();
}
}
答案 1 :(得分:0)
我想这可以使用TextFieldParser类解析。
拥有一个允许指定字段长度的look at this nice article。
链接中的一部分:
reader.SetFieldWidths(5, 21, 7, -1)
使用它你也可以处理可变长度字段。