Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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# 如果不存在,则在表中插入一个值_C#_Sql Server_Vb.net - Fatal编程技术网

C# 如果不存在,则在表中插入一个值

C# 如果不存在,则在表中插入一个值,c#,sql-server,vb.net,C#,Sql Server,Vb.net,使用SQLServer2005,vb.net 表1 Name FromDate ToDate Raja 12/02/2010 14/02/2010 Ravi 14/02/2010 15/02/2010 Ramu 18/02/2010 21/02/2010 ..., Insert into Table1 values('" & textbox1.text & "', '" & textbox2.text & "'. '" & textbox3.text

使用SQLServer2005,vb.net

表1

Name FromDate ToDate

Raja 12/02/2010 14/02/2010
Ravi 14/02/2010 15/02/2010
Ramu 18/02/2010 21/02/2010
...,

Insert into Table1 values('" & textbox1.text & "', '" & textbox2.text & "'. '" & textbox3.text & "'", con)
当我尝试在表1中插入一个值时,它会比较表中的值,如果相同,它应该抛出一个错误消息“Name and Date ready Exist”,否则插入一个值

在插入之前,我想将文本框值与表值进行核对

任何人都可以给出这方面的示例想法或代码。

在T-SQL中:

IF EXISTS(SELECT * FROM dbo.Table1 WHERE Name = @Name AND FromDate = @FromDate AND ToDate = @ToDate)
   RAISERROR (N'Values already exist', 10, 1)
ELSE
   INSERT INTO dbo.Table1(Name, FromDate, ToDate)
   VALUES(@Name, @FromDate, @ToDate)
然后从VB.NET代码中的参数化查询中调用它

有关RAISERROR的详细信息,请参阅MSDN文档:。这里的值“10”表示严重性,“1”表示状态。您可以在MSDN文档中看到所有可用严重性和状态的列表

或者将整个语句包装到一个处理所有这些的存储过程中,然后调用该存储过程


更新:

创建存储过程:

CREATE PROCEDURE dbo.InsertData(@Name VARCHAR(50), @FromDate DATETIME, @ToDate DAETIME)
AS BEGIN
   BEGIN TRANSACTION

   IF EXISTS(SELECT * FROM dbo.Table1 WHERE Name = @Name AND FromDate = @FromDate AND ToDate = @ToDate)
      ROLLBACK TRANSACTION
      RAISERROR (N'Values already exist', 10, 1)
   ELSE
      INSERT INTO dbo.Table1(Name, FromDate, ToDate)
      VALUES(@Name, @FromDate, @ToDate)

      COMMIT TRANSACTION
END
然后从代码中调用它(我对VB.NET不太熟悉-这是C#,但应该足够简单,可以翻译):

它很好地将所有内容封装到一个方法中-这对您有用吗???

在T-SQL中:

IF EXISTS(SELECT * FROM dbo.Table1 WHERE Name = @Name AND FromDate = @FromDate AND ToDate = @ToDate)
   RAISERROR (N'Values already exist', 10, 1)
ELSE
   INSERT INTO dbo.Table1(Name, FromDate, ToDate)
   VALUES(@Name, @FromDate, @ToDate)
然后从VB.NET代码中的参数化查询中调用它

有关RAISERROR的详细信息,请参阅MSDN文档:。这里的值“10”表示严重性,“1”表示状态。您可以在MSDN文档中看到所有可用严重性和状态的列表

或者将整个语句包装到一个处理所有这些的存储过程中,然后调用该存储过程


更新:

创建存储过程:

CREATE PROCEDURE dbo.InsertData(@Name VARCHAR(50), @FromDate DATETIME, @ToDate DAETIME)
AS BEGIN
   BEGIN TRANSACTION

   IF EXISTS(SELECT * FROM dbo.Table1 WHERE Name = @Name AND FromDate = @FromDate AND ToDate = @ToDate)
      ROLLBACK TRANSACTION
      RAISERROR (N'Values already exist', 10, 1)
   ELSE
      INSERT INTO dbo.Table1(Name, FromDate, ToDate)
      VALUES(@Name, @FromDate, @ToDate)

      COMMIT TRANSACTION
END
然后从代码中调用它(我对VB.NET不太熟悉-这是C#,但应该足够简单,可以翻译):

它很好地将所有内容封装到一个方法中-这对您有用吗???

使用“IF NOT EXIST”命令

使用“如果不存在”命令


将这两列设为复合键。将这两列设为复合键。@Marc\S,如果cmd=new-Sqlcommand(“您的查询”,con),我无法设置。在vb.net中,如果sqlcommand不接受。你对此有什么想法吗?如果另一个进程在你的if EXISTS(选择…和你的INSERT???)之间插入同一行怎么办?你不需要添加一个事务和一个(UPDLOCK,HOLDLOCK)关于
选择
@KM的提示:是的,最终,这将是最好的解决方案-将所有内容包装在事务中。我只是想让操作开始,甚至插入任何数据……但你绝对是right@Marc_s-当我尝试插入同一条记录时,您的代码不允许插入,但当我关闭表单时,再次加载表单时,您的代码允许插入相同的记录。@Gopal:这里肯定有其他问题-对数据库的检查将起作用-无论您是否“关闭表单”。要么您的数据没有写入数据库,要么您正在做其他事情来解决此问题。…@Marc_S,我无法确定是否cmd=new Sqlcommand(“您的查询”,con)。在vb.net中,如果Sqlcommand不接受,您对此有何想法。如果另一个进程在您的if之间插入同一行,该怎么办(选择…并插入???不需要添加事务和(UPDLOCK、HOLDLOCK)关于
选择
@KM的提示:是的,最终,这将是最好的解决方案-将所有内容包装在事务中。我只是想让操作开始,甚至插入任何数据……但你绝对是right@Marc_s-当我尝试插入同一条记录时,您的代码不允许插入,但当我关闭表单时,再次加载表单时,您的代码允许插入相同的记录。@Gopal:这里肯定有其他问题-对数据库的检查将起作用-无论您是否“关闭表单”。要么您的数据没有写入数据库,要么您正在做其他事情来解决此问题。。。。