私はこのWebアプリケーションを使用して、チェックボックスリストと値と日付を入力するテキストボックスを使用してWebフォームにデータを入力します。入力された値は、ストアドプロシージャを使用してデータベースに更新されます。ストアドプロシージャとクエリステートメントを使用した場合の正しい結果の問題
ストアドプロシージャを使用する場合、Webアプリケーションは正常に動作しますが、代わりにUpdate
ステートメントを使用すると、データベースで選択されたアイテムの数をユーザーが入力した値でデータベースを更新します。
たとえば、チェックボックスリストにすべての項目がチェックされている項目がある場合、ストアドプロシージャでは、ユーザが12を入力するとデータベースの各値は12になりますが、update文を使用すると、 132、誰も私にそれをなぜ説明し、ストアドプロシージャと同じ結果を得る方法があれば説明できますか?
CREATE TABLE AccountTable
(
RowID int IDENTITY(1, 1),
AccountID varchar(2),
AccountName varchar(50),
SeqNum int,
SeqDate datetime
)
CREATE PROCEDURE [ACCOUNTTABLE_UPDATE]
(@SeqNum int,
@SeqDate datetime,
@Account_ID varchar(2)
)
AS
SET NOCOUNT ON
BEGIN
UPDATE AccountTable
SET SeqNum = SeqNum + @SeqNum, SeqDate = @SeqDate
WHERE AccountID = @AccountID
END
C#コード:
DateTime dt = DateTime.Now;
DateTime.TryParseExact(datepicker.Text, "mmddyyyy", provider, style out dt);
int i = Int32.Parse(TextBox1.Text);
//DropDownList Binded from database values in another method
SqlConnection con = new SqlConnection(GetConnString());
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[dbo].[Table_Update]";
//Update Query cmd.CommandText = "Update Account Table SET SeqNum = SeqNum + @SeqNum, SeqDate = @SeqDate WHERE AccountID = @AccountID;";
cmd.Parameters.AddWithValue("@SeqNum", SqlDbType.Int).Value = i
cmd.Parameters.AddWithValue("@SeqDate",SqlDbType.DateTime).Value = DateTime.Now;
cmd.Parameters["@Account_ID", SqlDbType.VarChar).Value = CheckBoxList1.SelectedValue;
foreach (ListItem item in CheckBoxList.Items)
{
if (item.Selected)
{
cmd.Parameters["@SeqNum"].Value = i;
cmd.Parameters["@SeqDate"].Value = DateTime.Now;
cmd.Parameters["@Account_ID"].Value = item.Value;
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
Response.Write(ex.Message);
//Database Exceptions
}
finally
{
con.Close();
}
}
}
Updateクエリでは、すでにデータベースに値がある場合、選択した特定の「Account_ID」のテーブルセットに既に存在するものとユーザーが入力した数値を加算します。 – walangala
パラメータを2回定義しています - それはなぜですか? 'i'がどこで操作されているのかわからないコードはありますか? – user1666620
@ user1666620または、その点については 'DateTime.Now'。 – itsme86