【发布时间】:2014-06-25 15:17:57
【问题描述】:
最佳实践问题:
我有一个如下所示的 CSV 文件:
1,2,3
1,,3
,2,3
,,3
1
1
1
我希望它进入 SQL:
1,2,3
1,null,3
null,2,3
null,null,3
1,null,null
1,null,null
1,null,null
最后三行给我带来了问题。如果没有正确数量的逗号,我的“cmd.Parameters.Add”会抛出异常:当没有为数组中的该位置分配值时,IndexOutOfRangeException。我希望它只传递空值,就像它已经为逗号分隔空格的实例所做的那样。
while
{
string parts = new string[10];
parts = parser.ReadFields();
if (parts==null)
{break};
SqlCommand cmd = new SqlCommand("sp", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@one",SqlDbType.Int).Value = parts[0];
cmd.Parameters.Add("@two",SqlDbType.NVarChar).Value = parts[1];
cmd.Parameters.Add("@three",SqlDbType.Float).Value = parts[2];
[run cmd]
我应该怎么做?我有几百个参数,因此如果可能的话,最好避免使用我测试每个单个值是否为 null 然后应用 DBNull.Value 的解决方案。这是 [string parts = new string[10];] 我的问题吗?有没有更好的方法来声明这个数组来避免这些异常?
【问题讨论】:
-
当您的
ReadFields方法没有返回包含 10 个部分的数组时,您的问题是访问parts[0..n]... 您能显示该函数的代码吗? -
你可以使用
parts.ElementAtOrDefault(1) -
@Bun:我会把它加进去,但它使用的是内置的 VS TextFieldParser。
-
@Tim:好像不允许我将默认值设置为null?
-
你把我弄丢了,string的默认值为null。
标签: c# sql arrays csv sqlcommand