0

パラメータを使用すると、SQL Server 2005 データベースを更新する際に問題が発生します。ここでは、通常動作する必要があるコードを確認できます。

myCommand.Parameters.AddWithValue("@Pk", this.pk);
myCommand.Parameters.AddWithValue("@Titre", this.titre);
myCommand.CommandText = "Update Action set titre=@Titre where pk=@Pk";

//Execute la commande
myCommand.ExecuteNonQuery();

編集:次のようなハードコードを使用する場合:

myCommand.CommandText = "Update Action set titre='title' where pk=@Pk";

できます...

4

6 に答える 6

1

どこで間違ったのかわかりません。これは私にとって機能するコードです

string strCon = @"Data Source=SYSTEM19\SQLEXPRESS;Initial Catalog=TransactionDB;Integrated Security=True";

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlConnection cn = new SqlConnection(strCon);
            SqlCommand cmd = new SqlCommand("select * from tblTransaction1", cn);
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();
            da.Fill(ds);
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                txtName.Text = ds.Tables[0].Rows[i]["FirstName"].ToString();
                txtName1.Text = ds.Tables[0].Rows[i]["LastName"].ToString();
            }
        }
    }

ボタンクリックコード

protected void btnInsert_Click(object sender, EventArgs e)
{
    SqlConnection cn = new SqlConnection(strCon);
    obj1.FirstName = txtName.Text;
    obj1.LastName = txtName1.Text;
    if (obj1.upDate(cn))
    {

    }
}

サンプル クラス コード ファイル

private bool m_flag = false;
        private string strFirstName;
        private string strLastName;

        public string FirstName
        {
            get { return strFirstName; }
            set { strFirstName = value; }
        }

        public string LastName
        {
            get { return strLastName; }
            set { strLastName = value; }
        }

public bool upDate(SqlConnection con)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        if (con.State != ConnectionState.Open)
        {
            con.Open();
        }

        try
        {
            cmd.Parameters.AddWithValue("@Fname", FirstName);
            cmd.Parameters.AddWithValue("@Lname", LastName);
            cmd.CommandText = "Update tblTransaction1 set LastName=@Lname where FirstName=@Fname";
            if (cmd.ExecuteNonQuery() > 0)
            {
                m_flag = true;
            }
        }
        catch
        {

        }
        return m_flag;
    }

サンプル画像

SQL からのデータを含むフォーム

更新前のデータベースデータ

姓の変更

更新後

于 2012-04-25T16:04:17.420 に答える
1

「CommandType」パラメータを含めるのを忘れると、おかしな結果になることがありました。インライン SQL を使用しているため、「CommandType.Text」に設定する必要があります。

myCommand.Parameters.AddWithValue("@Pk", this.pk);
myCommand.Parameters.AddWithValue("@Titre", this.titre);
myCommand.CommandText = "Update Action set titre=@Titre where pk=@Pk";

// Added CommandType //
myCommand.CommandType = CommandType.Text;

//Execute la commande
myCommand.ExecuteNonQuery();
于 2012-04-25T14:47:41.863 に答える
0

コマンドを宣言した後にパラメータを追加してみてください。

myCommand.CommandText = "Update Action set titre=@Titre where pk=@Pk";
myCommand.Parameters.AddWithValue("@Pk", this.pk);
myCommand.Parameters.AddWithValue("@Titre", this.titre);


//Execute la commande
myCommand.ExecuteNonQuery();

ここで似たような(同一ではない) ものを見つけました: http://forums.asp.net/t/1249831.aspx/1

于 2012-04-25T15:38:14.570 に答える
0

もしあなたがそうするなら :

Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);

それは何と言っていますか?

また、次のように、スキーマ名を使用してアクション テーブルのプレフィックスを付けてみてください。

myCommand.CommandText = "Update MySchema.Action set titre=@Titre where pk=@Pk";

スキーマと、このスキーマを更新するユーザーの権限に依存する場合があるためです。

于 2012-04-25T14:06:40.230 に答える
0

これを試すことができます:そのようなパラメータを追加する代わりに

myCommand.Parameters.AddWithValue("@Titre", this.titre);

それらをデータ型で追加する必要があります。

myCommand.Parameters.Add(new SqlParameter("@Titre", SqlDbType.VarChar, 50));
myCommand.Parameters["@Titre"].Value = this.titre;

そうすれば、最終的な SQL はUpdate Action set titre='titre'の代わりになりUpdate Action set titre=titleます。2 番目のステートメントで、titreが引用符 '' で囲まれていないことに注意してください。

于 2012-04-25T14:53:25.220 に答える