在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文档中看到所有可用严重性和状态的列表。
或者将整个语句包装到一个处理所有这些事情的存储过程中,然后调用该存储过程。
UPDATE:
创建一个存储过程:
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
}
}
}
很好地封装每一个成一个单一的方法 - 这是否适合你?
让这两列的组合键。 – 2010-03-01 12:52:32