Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将长CSV字符串拆分为多个字符串变量_C#_Linq_Csv - Fatal编程技术网

C# 将长CSV字符串拆分为多个字符串变量

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中打断一个数

我有一个长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中打断一个数字,而不是逗号


我想用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并逐个获取数据对我来说很有用。