我需要在列中插入''(两个撇号)。 只是撇号,没有任何文本。 但是我最终插入了\'\'(带反斜杠的撇号)
NpgsqlCommand Cmd = new NpgsqlCommand("INSERT into Table(Col) VALUES(@value), conn);
Cmd.Parameters.AddWithValue("@value", "''");
Cmd.ExecuteNonQuery();
结果:\'\'出现在我的表格中。
如果我使用较少或更多的撇号,则可以插入,但我需要精确地插入2,然后出于某种原因出现反斜杠。
答案 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中,“是单个文字撇号的转义形式)。
但是,如果您要读取用户的输入,则一定要使用参数。