最佳实践问题:
我有一个如下所示的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。我希望它只传递null值,就像它已经用逗号分隔空格的实例一样。
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];]我的问题?有没有更好的方法来声明这个数组,以避免这些异常?
答案 0 :(得分:0)
string parts = new string[10];
错误(它应该只是string[] parts;
)。我很惊讶编译,声明和分配类型之间的不匹配。
但这不是问题所在。
尝试更改此行:
if (parts==null)
到此:
if (parts==null || parts.Length < 3)
或者,如果您需要这些行:
cmd.Parameters.Add("@one",SqlDbType.Int).Value = parts[0];
cmd.Parameters.Add("@two",SqlDbType.NVarChar).Value = parts[1] ?? DBNull.Value;
cmd.Parameters.Add("@three",SqlDbType.Float).Value = parts[2] ?? DBNull.Value;
答案 1 :(得分:0)
你不能简单地使用ElementAtOrDefault
或查看Length
的{{1}}吗?
string[]