C# 通过实体框架选择多行字符串

C# 通过实体框架选择多行字符串,c#,sql-server,entity-framework,cryptography,multiline,C#,Sql Server,Entity Framework,Cryptography,Multiline,我在C#中使用实体框架4(是的,我知道我应该升级,但这不是重点) 我在数据库中存储了70000个RSA私钥 格式如下: 注意-这是一个演示密钥 -----BEGIN RSA PRIVATE KEY----- MIICXQIDEMODEMODEMODEMODEMOEbGslt0N21onxRjBUwXFKI7CN6clxPAS+nEUK BZAEiJUDJLqcGa37EZv40UQnmGKpLZO3ypee9qvKRVC4Q3Oi3S+Ukfet7eJYvCwr WlneDOqvzyDz8cwl

我在C#中使用实体框架4(是的,我知道我应该升级,但这不是重点)

我在数据库中存储了70000个RSA私钥 格式如下: 注意-这是一个演示密钥

-----BEGIN RSA PRIVATE KEY-----
MIICXQIDEMODEMODEMODEMODEMOEbGslt0N21onxRjBUwXFKI7CN6clxPAS+nEUK
BZAEiJUDJLqcGa37EZv40UQnmGKpLZO3ypee9qvKRVC4Q3Oi3S+Ukfet7eJYvCwr
WlneDOqvzyDz8cwlLcE2YhOnCMLYJ3v3YSt0n10oryaKyADDbCd5PmBbUwIEB7CO
+QKBgCtLDEMODEMODEMODEMODEMOnNVbWYfVLhFJpdS1+5dTZbkOg6zaP+A/VKf1w
3psFl7VfbggqiEvAi+4hTULVZu0W0wqPQUkw+rGzVT8Fg1uwBrzUKScJbscuRE/J
1I6iizZ0sudjUynn+EORc12p1NRslf2BUW3nFIognt849r9JAkEA1V+5aGmJLZPP
xZ/ETst7tb1WMeOvNxu+s/h2kcW6+WCvlUErYiB2/E/LkTbYGXu5/OHIMDgbQbB+
28Bu7lYmUwJBAM12343234235AEIDmvGJChsPOaqwnClV/fSEx/6E8DXMhDHTENA
STt+v4k1rlkSlM2aliZ8kz2u8K45SepsVwECQQCmECecqVtfuIvC+8EKvlM536OT
XrLIeDOkRak8yRqQFEZzAlOXkOtKIxHBJuVT39sPK+xzU30FwRdLE858eBphAkB+
LExh7ejTrxN3dHr1mDhJWoLzm59dzgwfmuEznnH+OmMZSAY21IouIAXjnKfXeCLo
fRvUv5EuQkvGUJi1/25JAkAXZy7yjsJxaNBGB9TxakoHHnI2yWI/R9yewhzLorNo
Oj49W6l9uaWaNxxmCrNZRIZoDEMODEMODEMODEMODEMO
-----END RSA PRIVATE KEY-----
注意:由于某些原因,在堆栈溢出时,结束RSA行的格式不正确

但是,当我尝试通过entity framework重新选择密钥时,我只得到以下结果: -----开始RSA私钥-----

我认为这可能是SQL Server(在我的例子中是2008)在新行字符(“\n”)处终止字符串 因此,在返回到调用应用程序之前,我编写了一个存储过程来尝试在服务器端替换它

结果是这样的

Declare @str as nvarchar(max)
Declare @strReplaced as nvarchar(max)
set @str = (select PrivateKey from PrivateKeys where Id = @ID)
set @strReplaced = (select (REPLACE(@str, CHAR(10), '<<newline>>')))
select @strReplaced
它给了我------开始RSA私钥----- 无论原因是什么,它都会在较低的级别上影响SQL。因此,它会影响直接原始SQL和位于其上的实体框架

编辑——仔细检查,我使用的是SQL Server Express——它是否有可能影响返回字符串的限制

编辑---- 我修改了存储过程,将文本字段转换为二进制数据,然后将其发送给调用者。 通过此代码
选择CONVERT(VARBINARY(max),@str)

它在SQL Server上工作,但当通过C#代码远程调用时,它只会获得62字节的数据,当转换为字符串时——同样,这些字节构成了'----开始RSA私钥---'

我不知所措……

使用正则表达式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;


namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string key =
                "-----BEGIN RSA PRIVATE KEY-----\n" +
                "MIICXQIDEMODEMODEMODEMODEMOEbGslt0N21onxRjBUwXFKI7CN6clxPAS+nEUK\n" +
                "BZAEiJUDJLqcGa37EZv40UQnmGKpLZO3ypee9qvKRVC4Q3Oi3S+Ukfet7eJYvCwr\n" +
                "WlneDOqvzyDz8cwlLcE2YhOnCMLYJ3v3YSt0n10oryaKyADDbCd5PmBbUwIEB7CO\n" +
                "+QKBgCtLDEMODEMODEMODEMODEMOnNVbWYfVLhFJpdS1+5dTZbkOg6zaP+A/VKf1w\n" +
                "3psFl7VfbggqiEvAi+4hTULVZu0W0wqPQUkw+rGzVT8Fg1uwBrzUKScJbscuRE/J\n" +
                "1I6iizZ0sudjUynn+EORc12p1NRslf2BUW3nFIognt849r9JAkEA1V+5aGmJLZPP\n" +
                "xZ/ETst7tb1WMeOvNxu+s/h2kcW6+WCvlUErYiB2/E/LkTbYGXu5/OHIMDgbQbB+\n" +
                "28Bu7lYmUwJBAM12343234235AEIDmvGJChsPOaqwnClV/fSEx/6E8DXMhDHTENA\n" +
                "STt+v4k1rlkSlM2aliZ8kz2u8K45SepsVwECQQCmECecqVtfuIvC+8EKvlM536OT\n" +
                "XrLIeDOkRak8yRqQFEZzAlOXkOtKIxHBJuVT39sPK+xzU30FwRdLE858eBphAkB+\n" +
                "LExh7ejTrxN3dHr1mDhJWoLzm59dzgwfmuEznnH+OmMZSAY21IouIAXjnKfXeCLo\n" +
                "fRvUv5EuQkvGUJi1/25JAkAXZy7yjsJxaNBGB9TxakoHHnI2yWI/R9yewhzLorNo\n" +
                "Oj49W6l9uaWaNxxmCrNZRIZoDEMODEMODEMODEMODEMO\n" +
                "-----END RSA PRIVATE KEY-----\n";

            Regex expr = new Regex("-.*$", RegexOptions.Multiline);
            key = expr.Replace(key, "").Trim();

        }
    }
}
​
使用正则表达式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;


namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string key =
                "-----BEGIN RSA PRIVATE KEY-----\n" +
                "MIICXQIDEMODEMODEMODEMODEMOEbGslt0N21onxRjBUwXFKI7CN6clxPAS+nEUK\n" +
                "BZAEiJUDJLqcGa37EZv40UQnmGKpLZO3ypee9qvKRVC4Q3Oi3S+Ukfet7eJYvCwr\n" +
                "WlneDOqvzyDz8cwlLcE2YhOnCMLYJ3v3YSt0n10oryaKyADDbCd5PmBbUwIEB7CO\n" +
                "+QKBgCtLDEMODEMODEMODEMODEMOnNVbWYfVLhFJpdS1+5dTZbkOg6zaP+A/VKf1w\n" +
                "3psFl7VfbggqiEvAi+4hTULVZu0W0wqPQUkw+rGzVT8Fg1uwBrzUKScJbscuRE/J\n" +
                "1I6iizZ0sudjUynn+EORc12p1NRslf2BUW3nFIognt849r9JAkEA1V+5aGmJLZPP\n" +
                "xZ/ETst7tb1WMeOvNxu+s/h2kcW6+WCvlUErYiB2/E/LkTbYGXu5/OHIMDgbQbB+\n" +
                "28Bu7lYmUwJBAM12343234235AEIDmvGJChsPOaqwnClV/fSEx/6E8DXMhDHTENA\n" +
                "STt+v4k1rlkSlM2aliZ8kz2u8K45SepsVwECQQCmECecqVtfuIvC+8EKvlM536OT\n" +
                "XrLIeDOkRak8yRqQFEZzAlOXkOtKIxHBJuVT39sPK+xzU30FwRdLE858eBphAkB+\n" +
                "LExh7ejTrxN3dHr1mDhJWoLzm59dzgwfmuEznnH+OmMZSAY21IouIAXjnKfXeCLo\n" +
                "fRvUv5EuQkvGUJi1/25JAkAXZy7yjsJxaNBGB9TxakoHHnI2yWI/R9yewhzLorNo\n" +
                "Oj49W6l9uaWaNxxmCrNZRIZoDEMODEMODEMODEMODEMO\n" +
                "-----END RSA PRIVATE KEY-----\n";

            Regex expr = new Regex("-.*$", RegexOptions.Multiline);
            key = expr.Replace(key, "").Trim();

        }
    }
}
​


尽管如此,它还是应该起作用。问题是:您是否正确地使用了EF?或者您是否设置了EF,但通过SQL获取数据?抱歉,错过了存储过程部分。为什么要通过SP获取它?使用存储过程是解决此问题的一种尝试。如果我尝试使用entityName.PrivateKey-这也会给我一行,而不是完整的字符串。这很奇怪!我也在使用多行输入的EF,没有这种行为!您的PrivateKey字段/属性的数据类型是什么?varchar(max)?在数据库中,它是数据类型nvarchar(max)
CREATE TABLE[dbo]。[Domains]([Id][int]IDENTITY(1,1)不为空,[DomainName][nvarchar](max)不为空,[PrivateKey][nvarchar](max)不为空,[Added][datetime]不为空,[PriceUSD float]不为空,[Length][int]不为空,[TargetWord nvarchar max]不为NULL,
但它应该可以工作。问题是:您是否正确使用EF?或者您是否设置了EF但通过SQL获取数据?抱歉,错过了存储过程部分。为什么您要通过SP获取数据?使用存储过程是为了解决问题。如果我尝试使用entityName.PrivateKey,这也会给我s单行,与完整字符串相对。这很奇怪!我也使用EF和多行条目,没有这种行为!您的私钥字段/属性的数据类型是什么?varchar(max)?在数据库中是数据类型nvarchar(max)
CREATE TABLE[dbo].[Domains]([Id][int]IDENTITY(1,1)NOT NULL,[DomainName][nvarchar max]NOT NULL,[PrivateKey][nvarchar](最大值)不为空,[Added][datetime]不为空,[PriceUSD][float]不为空,[Length][int]不为空,[TargetWord][nvarchar](最大值)不为NULL,
但它应该可以工作。问题是:您是否正确使用EF?或者您是否设置了EF但通过SQL获取数据?抱歉,错过了存储过程部分。为什么您要通过SP获取数据?使用存储过程是为了解决问题。如果我尝试使用entityName.PrivateKey,这也会给我s单行,与完整字符串相对。这很奇怪!我也使用EF和多行条目,没有这种行为!您的私钥字段/属性的数据类型是什么?varchar(max)?在数据库中是数据类型nvarchar(max)
CREATE TABLE[dbo].[Domains]([Id][int]IDENTITY(1,1)NOT NULL,[DomainName][nvarchar max]NOT NULL,[PrivateKey][nvarchar](最大值)不为空,[Added][datetime]不为空,[PriceUSD][float]不为空,[Length][int]不为空,[TargetWord][nvarchar](最大值)不为空,
这没有帮助-问题是完整的字符串(密钥)是存储在SQL server上的,出于某种原因-字符串没有返回到C#代码,因此我无法对C#代码无法访问的内容执行正则表达式。在数据库中,变量的长度是多少。它可能不够长,无法包含所有字符。它通常默认为256,密钥本身是256。另外两个行超过数据库中的默认大小。nvarchar处于最大长度(nvarchar(max))该字段包含所有数据-当使用sql studio时,我可以很好地选择数据。当我尝试从C#执行相同操作时,它会被截断到RSA密钥第一行的末尾。您有888个字符。请确保在命令中指定长度,如:cmd.Parameters.Add(@Field1),SqlDbType.VarChar,1024);该size参数与存储过程/查询中使用的参数有关。它与数据库的返回值无关。澄清一下-我在将数据放入数据库时没有任何困难,我在从数据库中取出数据时遇到了问题。因此,更改参数不会解决此问题。这不会有帮助-问题是完整的字符串(键)是存储在SQL server上的,出于某种原因-字符串没有返回到C#代码,因此我无法对C#代码无法访问的内容执行正则表达式。在数据库中,变量的长度是多少。它可能不够长,无法包含所有字符。它通常默认为256,密钥本身是256。另外两个行它超过了数据库中的默认大小。nvarchar的最大长度(nvarchar(max))该字段包含所有数据-使用sql studio时,我可以很好地选择数据。就在我尝试从C#执行相同操作时-它被截断到RSA密钥第一行的末尾。您有888个字符
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;


namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string key =
                "-----BEGIN RSA PRIVATE KEY-----\n" +
                "MIICXQIDEMODEMODEMODEMODEMOEbGslt0N21onxRjBUwXFKI7CN6clxPAS+nEUK\n" +
                "BZAEiJUDJLqcGa37EZv40UQnmGKpLZO3ypee9qvKRVC4Q3Oi3S+Ukfet7eJYvCwr\n" +
                "WlneDOqvzyDz8cwlLcE2YhOnCMLYJ3v3YSt0n10oryaKyADDbCd5PmBbUwIEB7CO\n" +
                "+QKBgCtLDEMODEMODEMODEMODEMOnNVbWYfVLhFJpdS1+5dTZbkOg6zaP+A/VKf1w\n" +
                "3psFl7VfbggqiEvAi+4hTULVZu0W0wqPQUkw+rGzVT8Fg1uwBrzUKScJbscuRE/J\n" +
                "1I6iizZ0sudjUynn+EORc12p1NRslf2BUW3nFIognt849r9JAkEA1V+5aGmJLZPP\n" +
                "xZ/ETst7tb1WMeOvNxu+s/h2kcW6+WCvlUErYiB2/E/LkTbYGXu5/OHIMDgbQbB+\n" +
                "28Bu7lYmUwJBAM12343234235AEIDmvGJChsPOaqwnClV/fSEx/6E8DXMhDHTENA\n" +
                "STt+v4k1rlkSlM2aliZ8kz2u8K45SepsVwECQQCmECecqVtfuIvC+8EKvlM536OT\n" +
                "XrLIeDOkRak8yRqQFEZzAlOXkOtKIxHBJuVT39sPK+xzU30FwRdLE858eBphAkB+\n" +
                "LExh7ejTrxN3dHr1mDhJWoLzm59dzgwfmuEznnH+OmMZSAY21IouIAXjnKfXeCLo\n" +
                "fRvUv5EuQkvGUJi1/25JAkAXZy7yjsJxaNBGB9TxakoHHnI2yWI/R9yewhzLorNo\n" +
                "Oj49W6l9uaWaNxxmCrNZRIZoDEMODEMODEMODEMODEMO\n" +
                "-----END RSA PRIVATE KEY-----\n";

            Regex expr = new Regex("-.*$", RegexOptions.Multiline);
            key = expr.Replace(key, "").Trim();

        }
    }
}
​