Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Vb.net 正在尝试使MS SQL存储CRLF_Vb.net_Ms Access_Sql Server 2008 R2 - Fatal编程技术网

Vb.net 正在尝试使MS SQL存储CRLF

Vb.net 正在尝试使MS SQL存储CRLF,vb.net,ms-access,sql-server-2008-r2,Vb.net,Ms Access,Sql Server 2008 R2,如何让SQL 2008 R2将嵌入在字符串中的CR/LF(2段或多个CR/LF)存储到以编程方式插入vb.net的记录字段中?不是所有的记录都有CR/LF,所以我不能只将它们添加到每个记录中+Char(13)+Char(10),我可以用一个charlarry拆分 更新:这似乎是实际问题:XML解析器将CR/LF转换为LF只是为了保持一致性。我正在向web服务传递数据和从web服务传递数据,这似乎是CR丢失的地方。这是W3标准 这些字符串来自Access DB,并且CR/LF已经包含在记录的多段

如何让SQL 2008 R2将嵌入在字符串中的CR/LF(2段或多个CR/LF)存储到以编程方式插入vb.net的记录字段中?不是所有的记录都有CR/LF,所以我不能只将它们添加到每个记录中+Char(13)+Char(10),我可以用一个charlarry拆分

更新:这似乎是实际问题:XML解析器将CR/LF转换为LF只是为了保持一致性。我正在向web服务传递数据和从web服务传递数据,这似乎是CR丢失的地方。这是W3标准

这些字符串来自Access DB,并且CR/LF已经包含在记录的多段字段中。我只想直接将它们传入,但SQL正在将它们转换为空格

在VS Sql编辑器中,记录似乎存储了CR/LF应该驻留的20:20十六进制。字符串实际上应该有Char(13)&Char(10)或0x0D0A,但它没有

我甚至可以通过SSMS或VSSQL编辑器直接编辑或插入记录,也可以看到相同的结果。这些记录最初是通过web服务提交的,但为了测试,我已经删除了它。我了解到XML解析器还将仅为了一致性而将CR/LF转换为LF

我无法显示实际的查询。但是适配器是在这里构建的,并通过web服务调用填充和传递回我的应用程序。此过程适用于除包含CRLF的记录之外的所有记录

Dim strConnection As String
strConnection = ConfigurationManager.ConnectionStrings("ConnectionStringMyDB").ConnectionString

        Dim myConnection As New SqlConnection(strConnection)
        Dim myCommand As New SqlCommand(strSQL, myConnection)

' Access file name
myCommand.Parameters.AddWithValue("@dbName", OleDbType.VarChar).Value = dbName

' Table in Access DB           
myCommand.Parameters.AddWithValue("@tableName", OleDbType.VarChar).Value = tableName  

myConnection.Open()

' Create the DataAdapter
Dim myDataAdapter As New SqlDataAdapter()
myDataAdapter.SelectCommand = myCommand

' Populate the DataSet and close the connection
Dim myDataSet As New DataSet()
myDataAdapter.Fill(myDataSet)
myConnection.Close()

Return myDataSet
将数据集分配到表后在我的应用程序中处理

For Each row As DataRow In myTable.Rows
    Dim stringVal As String = row(columnName).ToString()

    ' Eventually added this to see that the row was adding 2 spaces after the carriage return
    Dim cstringVal() As Char = stringVal.ToCharArray
    Dim csearchValue() As Char = searchValue.ToCharArray

   ' Also added this code
       Dim line_array1 As [String]() = stringVal.Split(vbCr & vbLf.ToCharArray())
       Dim line_array2 As [String]() = searchValue.Split(vbCr & vbLf.ToCharArray())

    ' line_Array2 consistently IDs the vbCRLF, line_array1 never does.


    ' Originally tried
    If row(columnName) = searchValue Then
        return True
    End If

    ' Tried this
    If stringVal = searchValue Then
        Return True
    End If

    ' And this
     If String.Compare(stringVal, searchValue, False) = 0 Then
        Return True
     End If
   Next
Return False

谢谢

您混淆了数据存储、数据显示和编辑

我刚刚验证了SQL Server是否将CRLF存储在VARCHAR字段中:

insert into MyTable (VarcharField)
values ('A'+CHAR(13)+'B')
, ('A'+CHAR(13)+CHAR(10)+'B')
, ('A
B')
通过检查插入字符串的ASCII()代码

SELECT VarcharField, LEN(VarcharField),
  , ASCII(substring(VarcharField, 2, 1))
  , ASCII(substring(VarcharField, 3, 1))
FROM MyTable

CR和CRLF显示为空格,但它们仍然存储为0x0D和0x0A,或13和10。

可能是UNICODE的问题。根据我的经验,存储
CRLF
没有问题,但UNICODE ASCII可能存在问题

请试一试

Dim cmd as SQLCommand
cmd.CommandText = "insert into MyTable(fld) values (N'" + VariableContainingCRLF +"')"
cmd.ExecuteNonQuery


字符串前面的字母
N
NVarChar
至关重要
DataAdapter
引入了另一个令人困惑的层。

您是否尝试读回您的值并检查CRLF是否存在?是的,它们不存在,只有空间。我已经填充了一个字符来确认结果。我使用了一个Sql数据适配器来查询Sql表,如果假设它要将值转换回CR/LF,那么它还没有这样做。我将用代码更新帖子。CRLF是字符(13)和字符(10)更新的。我倾向于同意,但当您尝试填充SQL DataAdapter并比较字段时,它们仍然是空格。请参阅上面的代码。这就是为什么我想强制使用CRLF,如果可能的话,或者找到另一个可以接受的解决方法。问题恰恰是DataAdapter和比较字符串。我通读了一系列Access数据库表,以查看字符串是否匹配。DataAdapter不表示存储的字符串。这就是我试图解决的问题。@marc11h:添加用于读写数据的代码示例可能会很有用。当然,您希望看到什么,这是一个简单的SQL DataAdapter,我将其转储到表中。然后使用上面的代码进行迭代。我可以展示前面的部分,但它非常直接。待机。仅供参考,插入是通过表适配器完成的。可能很难显示代码,因为它都是自动生成的。
Dim cmd as SQLCommand
cmd.CommandText = "insert into MyTable(fld) values (@param)"
cmd.Parameters.Add("@param", SqlDbType.NVarChar, 50).Value = VariableContainingCRLF
cmd.ExecuteNonQuery