0
我使用存儲過程來更新表,但它不工作。 這就是:c#存儲過程不起作用
ALTER PROCEDURE [dbo].[updateRessourceLigneFab]
-- Add the parameters for the stored procedure here
@CodeArticle nvarchar(300),
@Division nvarchar(300),
@Colonne nvarchar(300),
@Valeur nvarchar(300),
@IDres nvarchar(300)
AS BEGIN SET NOCOUNT ON;
update dbo.[Ressources PDP] set @Colonne = @Valeur where [Code article] = @CodeArticle and Division = @Division and LigneFab = @IDres
END
GO
我打電話,在c#我的存儲過程是這樣的:
public static DataTable updateRessourceLigneFab(string CodeArticle, string Division, string Colonne, string Valeur, string IDres)
{
String querystring = "[TipiakTTP].[dbo].[updateRessourceLigneFab]";
var lsParam = new List<SqlParameter>();
AccesBase.ajouteParametre(ref lsParam, CodeArticle, "@CodeArticle");
AccesBase.ajouteParametre(ref lsParam, Division, "@Division");
AccesBase.ajouteParametre(ref lsParam, Colonne, "@Colonne");
AccesBase.ajouteParametre(ref lsParam, Valeur, "@Valeur");
AccesBase.ajouteParametre(ref lsParam, IDres, "@IDres");
return AccesBase.execute(querystring, lsParam);
}
這裏是我用來調用打電話給我的存儲過程的函數代碼:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
var grid = (DataGridView)sender;
if (grid[e.ColumnIndex, e.RowIndex].Value.ToString() != "")
{
string codearticle = grid[4, 0].Value.ToString() ;
string division = grid[3, 0].Value.ToString() ;
int y = int.Parse(getWeekNumberIncrement(Week)) - int.Parse(getDateNow())+1;
string val = "ress" + y.ToString();
if (y < 10)
{
val = "ress0" + y.ToString();
}
string colonne = "'"+ val +"'" ;
string valeur = grid[0, 0].Value.ToString() ;
string ligne = grid[5, 0].Value.ToString() ;
DataTable datagrid1 = Controller.Version.ControllerChoixVersion.getRessourceLigneFab(codearticle, division, ligne);
if (datagrid1.Rows.Count == 0)
{
Controller.Version.ControllerChoixVersion.insertRessourceLigneFab(codearticle, division, ligne);
}
Controller.Version.ControllerChoixVersion.updateRessourceLigneFab(codearticle, division, colonne, valeur, ligne);
}
的問題是,我沒有發現,爲什麼我的表沒有更新,我嘗試了很多東西,我仍然在試圖修復它..
信息這條SQL語句的工作原理:
update dbo.[Ressources PDP] set ress01 = '111' where [Code article] = '10000100510' and Division = '1000' and LigneFab = 'RECONDI'
我敢肯定這是簡單的東西,但我並不覺得。
感謝您的幫助
UPDATE /解決方案:
使用上面的代碼在我的存儲過程做的工作:
ALTER PROCEDURE [dbo].[updateRessourceLigneFab]
-- Add the parameters for the stored procedure here
@CodeArticle nvarchar(300),
@Division nvarchar(300),
@Colonne nvarchar(300),
@Valeur nvarchar(300),
@IDres nvarchar(300)
AS BEGIN DECLARE @SQLString NVARCHAR(500); SET NOCOUNT ON;
SET @SQLString = 'update dbo.[Ressources PDP] set '[email protected]+' = '[email protected]+' where [Code article] = '[email protected]+' and Division = '[email protected]+' and LigneFab = '[email protected]+'';
EXECUTE sp_executesql @SQLString
END
GO
我們需要解答'AccesBase.execute'的代碼。此位「@Colonne = @ Valeur」也永遠不會起作用。 – Jamiec
您無法在SQL中對列*名稱*進行參數化。你也不應該一般需要。這通常表明數據模型是錯誤的,並且相同類型的數據項已經在不同的列中結束,而實際上它們應該都佔用了相同的列(但是不同的行)。 –
這一行SQL可能工作,但存儲的proc不會。 – DavidG