C# 如果不存在,则在表中插入一个值
使用SQLServer2005,vb.net 表1C# 如果不存在,则在表中插入一个值,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
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:这里肯定有其他问题-对数据库的检查将起作用-无论您是否“关闭表单”。要么您的数据没有写入数据库,要么您正在做其他事情来解决此问题。。。。