更换 - \" - 与 - " -

时间:2017-10-24 09:53:21

标签: c# sql regex postgresql replace

我有一个包含" \",但我想删除它。 只需使用

string.Replace(@"\", "");

不起作用。 下面是字符串:

'Samsung Monitor 21\" ' 

应该是:

'Samsung Monitor 21" ' 

好的,让我详细介绍一下。

我正在使用postgresql数据库。我的testdatabase包含一些产品,例如。 - >三星显示器21" &lt ;-(我有点害怕使用'和") 我的程序登录到数据库,读取表并将其放入数据表中。 现在我想使用CellEdit事件编辑表。我正构建一个由查询作为命令运行的字符串。由于我没有关键字,因此不允许更改,我必须将该行的每个其他值与我的数据库中的行进行比较。

"UPDATE artikel SET warengruppe = 5 WHERE artikel_nr = '1100pplus' AND
bezeichnung = 'Samsung Monitor 21\" ' AND lieferanten_nr = 134 AND 
mengeneinheit = 'ST' AND verkaufspreis = '775.00' AND einkaufspreis 
= '465.00' AND lieferzeit = 28 AND bestand_lager = 2 AND bestand_minimum = 
10 AND jahresumsatz = '1550.00' AND vorjahresumsatz = '2325.00'"

由于每个Value都是从Datagrids单元格中取出的,因此它会自动将反斜杠放在 - >的前面。 " < - 。 我确实需要在SQLCommand中对它进行比较。

但只是给它那样的字符串,它显然不起作用,因为我的DataBase有

'Samsung Monitor 21" '

而不是

'Samsung Monitor 21\" '

只需使用" LIKE"是一个解决方法..

对于那些要求的人来说,这是我完整的方法:

private void SQLDatagrid_OnCurrentCellChanged(object sender,DataGridCellEditEndingEventArgs e)         {

        DataGridColumn col1 = e.Column;
        DataGridRow row1 = e.Row;
        int row_index = ((DataGrid)sender).ItemContainerGenerator.IndexFromContainer(row1);
        int col_index = col1.DisplayIndex;
        int i = 0;
        string commandstring = "UPDATE artikel SET ";
        string tmpcell = dt.Rows[row_index][col_index].ToString();
        tmpcell = tmpcell.Replace(',', '.');
        bool valueisint = isInteger(tmpcell);

        commandstring += dt.Columns[col_index].ColumnName + " = ";

        if (!valueisint)
        {
            commandstring += "'";
        }
        commandstring += tmpcell;
        if (!valueisint)
        {
            commandstring += "'";
        }
        commandstring += " WHERE ";

        foreach (DataColumn dataColumn in dt.Columns)
        {
            string cell = dt.Rows[row_index][i].ToString();
            cell = cell.Replace(',', '.');
            bool tmp = isInteger(cell);
            if (i > 0 && i != col_index)
            {
                commandstring += " AND ";
            }
            if (i != col_index)
            {
                commandstring += dataColumn.ColumnName + " = ";
                if (!tmp)
                {
                    commandstring += "'";
                }
                commandstring += cell;
                if (!tmp)
                {
                    commandstring += "'";
                }
            }
            i++;
        }
        commandstring = Regex.Replace(commandstring, @"\\", ""); // this is just trying out
        commandstring = commandstring.Replace(@"/", "");  // As is this
        SqlCommand command = new SqlCommand(commandstring);

1 个答案:

答案 0 :(得分:1)

您无需做任何事情。您没有\的字符串。您的字符串只有" 。调试器和监视窗口以几乎所有语言(C#,VB.NET,Java,Javascript,PHP,Ruby)中的字符串文字使用的形式显示字符串,即前面有\

您的字符串 Samsung Monitor 21"。但是为了在代码中键入它,你必须写:

var myString = "Samsung Monitor 21\" ";

注意

如果您将nq format specifier添加到监视表达式,例如myString,nq

,您可以强制监视窗口显示不带引号的字符串

BackslashAndNQ

这表明双引号在普通监视表达式中转义,如果添加,nq则未转义