訪問数を記録する1つの列テーブルがあります。 Global.asax.csでは、application_start内でこの値を1ずつ増やそうとしましたが、フィールドは更新されません。例外はありませんが、影響を受ける行の数は常にゼロです。MS SQLテーブルを更新できません
SSMSで同じ簡単なクエリを試しましたが、同じことが起こりました。0行が影響を受けました。 NumVisitsという1つのint列があります。
Application.Lock();
int iNumVisits = SomeClass.GetNumVisits();
SomeClass.UpdateNumVists(iNumVisits + 1);
Application.UnLock();
これは工assである(BLL): これはGlobal.asax.csでのApplication_Startの一部である
public static void UpdateNumVists(int iNumVisists)
{
LocaleRepository oLocaleRepository = new LocaleRepository(new SqlDbContext());
oLocaleRepository.UpdateNumVists(iNumVisists);
}
これはDALである:
public void UpdateNumVists(int iNumVisits)
{
int iRet = 0;
try
{
dbContext.Open();
List<SqlParameter> spParams = new List<SqlParameter>();
string sQuery = "update Visits set NumVisits = @NumVisits";
spParams.Add(dbContext.CreateSqlParam("@NumVisits", SqlDbType.Int, 0, iNumVisits));
dbContext.ExecuteSqlNonQuery(sQuery, spParams, ref iRet);
}
catch (Exception e)
{
throw e;
}
finally
{
dbContext.Close();
}
return;
}
私が使用しますexecuteNonQueryを使用するすべてのコマンドで次のようになります。
public void ExecuteSqlNonQuery(string sQuery, List<SqlParameter> spParams, ref int iRet)
{
using (SqlCommand command = new SqlCommand())
{
command.CommandType = CommandType.Text;
command.Parameters.AddRange(spParams.ToArray<SqlParameter>());
command.Connection = DbConnection;
command.CommandText = sQuery;
try
{
iRet = command.ExecuteNonQuery();
}
catch(Exception e)
{ }
}
}
更新コマンドを実行すると、iRetはゼロになります。なぜ単純な更新クエリが機能しないのかわかりません。
これは私がSSMSからもらっ作成するスクリプトです:テーブル内のデータが存在しないように思え
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Visits](
[NumVisits] [int] NULL
) ON [PRIMARY]
GO
テーブルにデータがありますか? –
最初は、いいえ。フィールドはnullです。選択されたメソッドはゼロを返します。更新は更新されません。私はそれが違いをもたらすかどうかをゼロに初期化します。 – NoBullMan
コメントを返信に変更できますか?ヌル値をゼロに変更すると問題が解決しました。私は答えとしてマークします。 – NoBullMan