如何在SQL中插入''(2个撇号)

时间:2019-07-03 18:37:34

标签: c# sql npgsql

我需要在列中插入''(两个撇号)。 只是撇号,没有任何文本。 但是我最终插入了\'\'(带反斜杠的撇号)

        NpgsqlCommand Cmd = new NpgsqlCommand("INSERT into Table(Col) VALUES(@value), conn);
        Cmd.Parameters.AddWithValue("@value", "''");
        Cmd.ExecuteNonQuery();

结果:\'\'出现在我的表格中。

如果我使用较少或更多的撇号,则可以插入,但我需要精确地插入2,然后出于某种原因出现反斜杠。

5 个答案:

答案 0 :(得分:0)

如何使用逐字标识符?

NpgsqlCommand cmd = new NpgsqlCommand (INSERT into Table (Col) VALUES (@value);
Cmd.Parameters.AddWithValue("value", @"''");
Cmd.ExecuteNonQuery();

对不起,仔细一看,我认为这可能是您的答案:

NpgsqlCommand cmd = new NpgsqlCommand (INSERT into Table (Col) VALUES (@value);
Cmd.Parameters.AddWithValue("value", "''''");
Cmd.ExecuteNonQuery();

要在SQL中插入撇号,必须将其置于双引号中,否则SQL将其视为字符串指示符。在这种情况下,请尝试插入两组双单引号。

答案 1 :(得分:0)

尝试将每个撇号加倍。

  

Cmd.Parameters.AddWithValue(“ value”,“''''”);

答案 2 :(得分:0)

添加一个空文本框并以某种方式使用它的文本值,让我们插入双撇号。

所以答案应该是

NpgsqlCommand cmd = new NpgsqlCommand (INSERT into Table (Col) VALUES (@value);
Cmd.Parameters.AddWithValue("@value", textBox1.text);
Cmd.ExecuteNonQuery();

其中texBox1只是一个空文本框。

这可能不是最好的方法,但目前仍然有效。

答案 3 :(得分:0)

我没有方便使用的环境,但是为什么不可以

Sub ChangeDocsToTxtOrRTFOrHTML()
    'with export to PDF in Word 2007
    Dim fs As Object
    Dim oFolder As Object
    Dim tFolder As Object
    Dim oFile As Object
    Dim strDocName As String
    Dim intPos As Integer
    Dim locFolder As String
    Dim fileType As String
    On Error Resume Next

    locFolder = InputBox("Enter the folder path to DOCs", "File Conversion", "C:\Users\your_path_here\")
    Select Case Application.Version
        Case Is < 12
            Do
                fileType = UCase(InputBox("Change DOC to TXT, RTF, HTML", "File Conversion", "TXT"))
            Loop Until (fileType = "TXT" Or fileType = "RTF" Or fileType = "HTML")
        Case Is >= 12
            Do
                fileType = UCase(InputBox("Change DOC to TXT, RTF, HTML or PDF(2007+ only)", "File Conversion", "TXT"))
            Loop Until (fileType = "TXT" Or fileType = "RTF" Or fileType = "HTML" Or fileType = "PDF")
    End Select

    Application.ScreenUpdating = False
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set oFolder = fs.GetFolder(locFolder)
    Set tFolder = fs.CreateFolder(locFolder & "Converted")
    Set tFolder = fs.GetFolder(locFolder & "Converted")

    For Each oFile In oFolder.Files
        Dim d As Document
        Set d = Application.Documents.Open(oFile.Path)
        strDocName = ActiveDocument.Name
        intPos = InStrRev(strDocName, ".")
        strDocName = Left(strDocName, intPos - 1)
        ChangeFileOpenDirectory tFolder
        Select Case fileType
            Case Is = "TXT"
                strDocName = strDocName & ".txt"
                ActiveDocument.SaveAs FileName:=strDocName, FileFormat:=wdFormatText
        Case Is = "RTF"
                strDocName = strDocName & ".rtf"
                ActiveDocument.SaveAs FileName:=strDocName, FileFormat:=wdFormatRTF
        Case Is = "HTML"
                strDocName = strDocName & ".html"
                ActiveDocument.SaveAs FileName:=strDocName, FileFormat:=wdFormatFilteredHTML
        Case Is = "PDF"
                strDocName = strDocName & ".pdf"
                ActiveDocument.ExportAsFixedFormat OutputFileName:=strDocName, ExportFormat:=wdExportFormatPDF
        End Select
        d.Close
        ChangeFileOpenDirectory oFolder
    Next oFile
    Application.ScreenUpdating = True

End Sub

答案 4 :(得分:0)

上面的结果似乎有很多困惑。

Npgsql不会对参数进行任何转义,因为它们是带外发送的,在SQL中未处理。如果您的参数值包含带有两个撇号的C#字符串,那么它将被插入数据库中。

在上面运行代码并使用psql之后,我得到以下信息:

var cmd = new NpgsqlCommand("INSERT into foo (name) VALUES (@value)", conn);
cmd.Parameters.AddWithValue("@value", "''");
cmd.ExecuteNonQuery();
npgsql_tests=# select * from foo;
 name 
------
 ''
(1 row)

也许pgadmin使用反斜杠显示值-我不知道-但这将是显示问题。

最后,如果您确实想插入一个常数值(与用户提供的常数相反),则没有理由使用参数。只需将您的价值嵌入SQL中即可:

INSERT INTO foo (name) VALUES ('''''');

其中有六个撇号:两个是字符串定界符,另外两个是转义的撇号(在SQL中,“是单个文字撇号的转义形式)。

但是,如果您要读取用户的输入,则一定要使用参数。