Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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
C# 如何使用IF EXISTS in SQL(IF EXISTS update,else insert in SQL)_C#_Sql Server_If Statement_Exists_Insert Update - Fatal编程技术网

C# 如何使用IF EXISTS in SQL(IF EXISTS update,else insert in SQL)

C# 如何使用IF EXISTS in SQL(IF EXISTS update,else insert in SQL),c#,sql-server,if-statement,exists,insert-update,C#,Sql Server,If Statement,Exists,Insert Update,我用SAY来计算搜索次数 此代码正在将列(PIN)上的所有记录更改为搜索文本 哪里/什么是我的错 您需要有一个不更新所有记录的位置。这会解决它。。。。但这是一个可怕的问题 string searched = TextBox1.Text; // for example, text is 4477 ... sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin =' " + searched.ToString() + " ')

我用SAY来计算搜索次数

此代码正在将列(PIN)上的所有记录更改为搜索文本


哪里/什么是我的错

您需要有一个不更新所有记录的位置。这会解决它。。。。但这是一个可怕的问题

string searched = TextBox1.Text; // for example, text is 4477

...

sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin =' " + searched.ToString() + " ') BEGIN UPDATE [Pins] SET SAY= SAY+1, Pin = ' " + searched.ToString() + " ' END ELSE BEGIN INSERT INTO Pins(SAY,Pin) VALUES (+1,' " + searched.ToString() + " ') END";

...

您需要有一个不更新所有记录的位置。这会解决它。。。。但这是一个可怕的问题

string searched = TextBox1.Text; // for example, text is 4477

...

sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin =' " + searched.ToString() + " ') BEGIN UPDATE [Pins] SET SAY= SAY+1, Pin = ' " + searched.ToString() + " ' END ELSE BEGIN INSERT INTO Pins(SAY,Pin) VALUES (+1,' " + searched.ToString() + " ') END";

...

在伪代码中,您的意思是

IF EXISTS(SELECT * FROM [Pins] WHERE Pin = 'searched.ToString()')
BEGIN 
    UPDATE [Pins] SET SAY = SAY + 1
    WHERE [Pin] = 'searched.ToString() '
END 
ELSE 
BEGIN 
    INSERT INTO Pins(SAY, Pin) VALUES (1, 'searched.ToString()') 
END
正确的方法是

IF EXISTS(SELECT Statement) UPDATE ALL ROWS

在伪代码中,您的意思是

IF EXISTS(SELECT * FROM [Pins] WHERE Pin = 'searched.ToString()')
BEGIN 
    UPDATE [Pins] SET SAY = SAY + 1
    WHERE [Pin] = 'searched.ToString() '
END 
ELSE 
BEGIN 
    INSERT INTO Pins(SAY, Pin) VALUES (1, 'searched.ToString()') 
END
正确的方法是

IF EXISTS(SELECT Statement) UPDATE ALL ROWS

您错过了
WHERE
子句

我还更喜欢使用
参数
而不是字符串串联查询(这会使您的代码容易受到SQL注入攻击)


您错过了
WHERE
子句

我还更喜欢使用
参数
而不是字符串串联查询(这会使您的代码容易受到SQL注入攻击)


update语句中没有where子句。更大的问题是,这是一个sql注入的教科书示例。在bobby tables来访之前,您需要对查询进行参数化。我会将其移动到存储过程中,这样您就可以更好地控制正在发生的事情,并且可以调试/维护它,而无需将这个讨厌的大字符串解析为易读的内容。update语句中没有where子句。更大的问题是,这是一个sql注入的教科书示例。在bobby tables来访之前,您需要对查询进行参数化。我将把它移动到一个存储过程中,这样您就可以更好地控制正在发生的事情,并且可以调试/维护它,而不必将这个讨厌的大字符串解析为易读的内容。