我有一个工作正常的存储过程,但我最近添加了三个新的参数:
**@HasObits**, **@AlternateName**, and **@Notes**.
CREATE PROCEDURE dbo.sp_InsertNewRecord
(
@CountryID int,
@StateID int,
@CountyID int,
@RecordsOnline bit = 0,
**@HasObits bit = 0,**
@Name varchar(100),
**@AlternateName varchar(100) = null,**
@Address varchar(50) = null,
@Address2 varchar(50) = null,
@City varchar(50) = null,
@ZipCode varchar(10) = null,
@Phone char(10) = null,
@Fax char(10) = null,
@Email varchar(50) = null,
@Website varchar(100) = null,
@SearchURI varchar(150) = null,
**@Notes text = null,**
@AddedBy uniqueidentifier = null
)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO MyTable (CountryID, StateID, CountyID, RecordsOnline, HasObituaries, [Name], AlternateName, [Address], Address2, City, ZipCode, Phone, Fax, Email, Website, SearchURI, Notes, AddedBy)
VALUES (@CountryID, @StateID, @CountyID, @RecordsOnline, @HasObits, @Name, @AlternateName, @Address, @Address2, @City, @ZipCode, @Phone, @Fax, @Email, @Website, @SearchURI, @Notes, @AddedBy)
END
GO
此方法由我的数据访问层调用此方法:
public void Insert(Company company)
{
// create connection
SqlConnection conn = new SqlConnection(_connectionString);
// create command
SqlCommand cmd = new SqlCommand(COMPANY_INSERT, conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
// init command params
cmd.Parameters.AddWithValue("CountryID", company.CountryID);
cmd.Parameters.AddWithValue("StateID", company.StateID);
cmd.Parameters.AddWithValue("CountyID", company.CountyID);
**cmd.Parameters.AddWithValue("HasObituaries", company.HasObituaries);**
cmd.Parameters.AddWithValue("Name", company.Name);
**cmd.Parameters.AddWithValue("AlternateName", (string.IsNullOrEmpty(company.AlternateName)) ? null : company.AlternateName);**
cmd.Parameters.AddWithValue("Address", (company.Address.Length == 0) ? null : company.Address);
cmd.Parameters.AddWithValue("City", (company.City.Length == 0) ? null : company.City);
cmd.Parameters.AddWithValue("ZipCode", (company.ZipCode.Length == 0) ? null : company.ZipCode);
cmd.Parameters.AddWithValue("Phone", (company.Phone.Length == 0) ? null : company.Phone);
cmd.Parameters.AddWithValue("Fax", (company.Fax.Length == 0) ? null : company.Fax);
cmd.Parameters.AddWithValue("Website", (company.Website.Length == 0) ? null : company.Website);
cmd.Parameters.AddWithValue("SearchURI", (company.SearchURI.Length == 0) ? null : company.SearchURI);
cmd.Parameters.AddWithValue("AddedBy", (company.AddedBy == Guid.Empty) ? null : company.AddedBy.ToString());
**cmd.Parameters.AddWithValue("Notes", company.Notes);**
using (conn)
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
这个方法一直很好,直到我添加了三个新的参数。现在当这个方法运行时,它一直给我错误:“@ HasObits不是程序sp_InsertNewRecord的参数”如果我注释掉那行,它只用@AlternateName表示相同的错误,那么我评论那个和@Notes说的相同,所以我评论出来,然后成功插入记录。
如果我不得不猜测,我会说SqlCommand由于某种原因没有注册param。我可以在SQL Server 2008中运行以下SQL命令,它完全符合我的预期:
exec sp_InsertNewRecord @CountryID = 1, @StateID = 13, @CountyID = 1, @Name = 'TESTING', @HasObits = 1, @Notes = 'testing notes', @AlternateName = 'alternate name'
我现在处于亏损状态。我从来没有这样的问题,现在花了大约5个小时试图找到答案,所以任何帮助都将不胜感激!
传入的参数的数据类型(company.HasObits是bool,company.AlternateName是字符串,company.Notes是字符串)。
提前感谢您的帮助!我对此感到非常沮丧,并希望有人能够对此有所了解。
答案 0 :(得分:1)
您的SP有一个参数= @HasObits但您的SqlCommand正在将参数添加为Hash Obituaries。
**cmd.Parameters.AddWithValue("HasObituaries", company.HasObituaries);**
这可能是其中一个问题的根源。
答案 1 :(得分:1)
在您的代码中添加
cmd.Parameters.AddWithValue("HasObituaries", company.HasObituaries);
但在您的商店中,您的参数是@HasObits。
以这种方式更改代码:
cmd.Parameters.AddWithValue("HasObits", company.HasObituaries);
答案 2 :(得分:0)
即使您拥有这些参数的默认值,也需要将它们添加到cmd.Parameters
集合中。 (您可以指定DBNull.Value
)。
答案 3 :(得分:0)
说出一个名字;使用HasObits或HasObituaries。然后将代码,存储过程和列名更新为所有匹配。
答案 4 :(得分:0)
这个问题归咎于托管公司移动数据库服务器,因为我正在测试应用程序,它不再指向正确的数据库了。
所有代码都是/是正确的(这让我感觉更好),但它只是指向错误的数据库服务器。大约5个小时后,我收到了一封电子邮件,告诉我它已被切换,我需要更新对旧服务器的任何引用。