我有從代碼調用存儲過程的問題。OdbcCommand存儲過程
我的存儲過程:
ALTER PROCEDURE [dbo].[ChangePassword]
@param1 sysname,
@param2 sysname
AS
BEGIN
DECLARE @sql nvarchar(500)
SET @sql = 'ALTER LOGIN ' + @param1 + ' WITH PASSWORD = '''+ @param2 +'''';
EXEC sp_executesql @sql
END;
當我運行這個從SQL編輯器工作正常,但是當我把這種從功能:
using (var command = new OdbcCommand("{call ChangePassword(?,?)}", connection))
{
try
{
command.CommandType = CommandType.StoredProcedure;
//command.Parameters.AddWithValue("@param1", user.Username);
//command.Parameters.AddWithValue("@param2", user.password);
command.Parameters.Add("@param1", OdbcType.VarChar, 50).Value = user.Username;
command.Parameters.Add("@param2", OdbcType.VarChar, 50).Value = user.password;
connection.Open();
command.ExecuteNonQuery();
connection.Close();
return true;
}
我收到錯誤
ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'MYPASSWORD'.
@param2附近
請有人可以幫助我。
我找到了辦法... :)
ALTER PROCEDURE [dbo].[ChangePassword]
@param1 sysname,
@param2 sysname
AS
BEGIN
DECLARE @sql nvarchar(500)
SET @sql = 'ALTER LOGIN ' + @param1 + ' WITH PASSWORD = '+ @param2 +'';
EXEC sp_executesql @sql
END;
這些語法工作:)但現在當我從SQL編輯器中運行我有,我在以前的版本中存儲的函數調用時相同的錯誤程序。
有人可以解釋這一點嗎?
編輯
,最後要感謝馬克Gravell:
ALTER PROCEDURE [dbo].[ChangePassword]
@param1 sysname,
@param2 sysname
AS
BEGIN
DECLARE @SQL nvarchar(4000)
SET @SQL = N'ALTER LOGIN ' + QUOTENAME(@param1) + N' WITH PASSWORD = ' + QUOTENAME(@param2,'''');
EXEC(@SQL);
END;
感謝
爲什麼不使用雙引號並在裏面放單引號?喜歡 」'」 ? – Edper
您能否告訴我們在使用SQL編輯器和C#時,您準確使用哪些值? – Tafari
@JimRhodes也許這是他的密碼? – gleng