使用SQL Server 2005,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)
当我尝试在table1中插入一个值时,它将比较表值是否相同,它应该抛出一个错误信息“名称和日期已经存在”,否则插入一个值。
插入之前我想检查带有表值的文本框值。
任何人都可以为此提供样本想法或代码。
答案 0 :(得分:3)
在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文档:http://msdn.microsoft.com/en-us/library/ms178592.aspx。这里的值“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#,但应该足够简单来翻译):
using(SqlConnection _con = new SqlConnection('your connection string here'))
{
using(SqlCommand _cmd = new SqlCommand("InsertData", _con)
{
_cmd.CommandType = CommandType.StoredProcedure;
// add parameters as necessary
_cmd.Parameters.AddWithValue("@Name", "Your Name");
_cmd.Parameters.AddWithValue("@FromDate", "20100101");
_cmd.Parameters.AddWithValue("@ToDate", "20100331");
try
{
// open connection, execute stored proc, close connection
_con.Open();
_cmd.ExecuteNonQuery();
_con.Close();
}
catch(SqlException sqlexc)
{
// handle SQL exception
}
}
}
很好地将所有内容封装到一个方法中 - 这对你有用吗?
答案 1 :(得分:2)
使用“IF NOT EXIST”命令
IF NOT EXISTS (SELECT * FROM Table WHERE YourContition) INSERT INTO Table (a,b) VALUES (@c1,@c2)