C# 将长CSV字符串拆分为多个字符串变量
我有一个长CSV字符串,最大长度为44119个字符。我有一个SQL存储过程,它接受1到6个参数,每个参数都是varchar8000,通过这种方式将长CSV划分为多个参数,并将其传递给存储过程 我的存储过程工作正常,但如何将长CSV划分为不同的字符串变量,使其不超过8000个字符的字符串长度 例如:C# 将长CSV字符串拆分为多个字符串变量,c#,linq,csv,C#,Linq,Csv,我有一个长CSV字符串,最大长度为44119个字符。我有一个SQL存储过程,它接受1到6个参数,每个参数都是varchar8000,通过这种方式将长CSV划分为多个参数,并将其传递给存储过程 我的存储过程工作正常,但如何将长CSV划分为不同的字符串变量,使其不超过8000个字符的字符串长度 例如: string myLongCSV = "1,2,345,5674,234,22,34..." //a long CSV 我不能使用子字符串0,8000,因为第8000个字符可能在长CSV中打断一个数
string myLongCSV = "1,2,345,5674,234,22,34..." //a long CSV
我不能使用子字符串0,8000,因为第8000个字符可能在长CSV中打断一个数字,而不是逗号
我想用C编写代码,将长CSV中的所有数字分成不同的字符串变量,使每个变量的长度不超过8000个字符。如果可以,请修改SQL存储过程以使用数据类型为VACHARMAX的单个参数,因为该参数最多可存储2147483647个字符 如果不能,请使用String.Split函数,如下所示:
string[] words = myLongCSV.Split(',');
foreach (string word in words)
{
// some logic here to construct your parameters and check their length.
}
string s = "123,45636...";
int index = 7;
while (true)
{
if (s[index] == ',')
{
s = s.Substring(0, index);
break;
}
else
{
index--;
}
}
如果可以,请修改SQL存储过程以使用数据类型为VACHARMAX的单个参数,因为该参数最多可存储2147483647个字符 如果不能,请使用String.Split函数,如下所示:
string[] words = myLongCSV.Split(',');
foreach (string word in words)
{
// some logic here to construct your parameters and check their length.
}
string s = "123,45636...";
int index = 7;
while (true)
{
if (s[index] == ',')
{
s = s.Substring(0, index);
break;
}
else
{
index--;
}
}
试试这个
其思想是获取第8000个字符,如果它是一个数字,则减少索引,直到它为',此时可以执行子字符串,如下所示:
string[] words = myLongCSV.Split(',');
foreach (string word in words)
{
// some logic here to construct your parameters and check their length.
}
string s = "123,45636...";
int index = 7;
while (true)
{
if (s[index] == ',')
{
s = s.Substring(0, index);
break;
}
else
{
index--;
}
}
试试这个
其思想是获取第8000个字符,如果它是一个数字,则减少索引,直到它为',此时可以执行子字符串,如下所示:
string[] words = myLongCSV.Split(',');
foreach (string word in words)
{
// some logic here to construct your parameters and check their length.
}
string s = "123,45636...";
int index = 7;
while (true)
{
if (s[index] == ',')
{
s = s.Substring(0, index);
break;
}
else
{
index--;
}
}
到目前为止你试过什么?另外,TVPs可能是更好的选择吗?将CSV传递到SQL通常不是一个好的选择。到目前为止,您尝试了什么?另外,TVPs可能是更好的选择吗?将CSV传递到SQL通常不是一个好的选择。我使用的是带有varcharmax的SQL存储过程,但在使用长参数执行它时,它通常会在8000个字符后截断。您如何从SP调用SP?ADO.NET?实体框架?您可能在代码中使用了错误的参数数据类型。我刚刚使用SQL Server management studio中的查询编辑器(如Exec MyStoredProc“1,2,3,…”//long csv文件)对其进行了测试。但最终我想从我的C代码中调用它。确保使用VARCHARMAX数据类型。同时检查您的SSMS选项。如果您正在执行选择,则返回的结果中会有一个默认截止长度。我使用的是带有varcharmax的sql存储proc,但在使用长参数执行时,它通常会在8000个字符后截止。您如何从SP调用SP?ADO.NET?实体框架?您可能在代码中使用了错误的参数数据类型。我刚刚使用SQL Server management studio中的查询编辑器(如Exec MyStoredProc“1,2,3,…”//long csv文件)对其进行了测试。但最终我想从我的C代码中调用它。确保使用VARCHARMAX数据类型。同时检查您的SSMS选项。如果您正在执行SELECT,则返回的结果中有一个默认截止长度。这是个好主意,但您可能希望使用来实现此操作,这样就不需要循环。最后,我在数据库中创建了一个varcharMax字段,并将整个44119个字符作为CSV字符串传递。当我以前在存储过程中使用Split以逗号分隔CSV时,它在8000个字符后截断数据,但使用charindex并逐个获取数据对我来说很有效。好主意,但您可能希望使用来实现这一点,所以不需要循环。最后,我在数据库中创建了一个varcharMax字段,并将整个44119个字符作为CSV字符串传递。当我使用存储过程中的Split以逗号分隔CSV时,它在8000个字符后截断数据,但使用charindex并逐个获取数据对我来说很有用。