0
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace ADO_DataSet_Prac
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        DataSet ds = new DataSet();
        SqlDataAdapter da;
        DataTable dt;

        private void Form1_Load(object sender, EventArgs e)
        { 
            SqlConnection con = new SqlConnection("Server = localhost; Database = MSNETDB; Integrated Security=True;MultipleActiveResultSets=True");
             da = new SqlDataAdapter("Select * from Emp",con);
             da.Fill(ds, "Emp");
             dt=ds.Tables["Emp"];
             gvEmp.DataSource = dt;

           //Insert command for data adapter
            SqlCommand cmdInsert = new SqlCommand("Insert into Emp(EmpName,EmpSalary) Values(@Name,@Salary)", con);
            SqlParameter Name = cmdInsert.Parameters.Add("@Name", SqlDbType.VarChar, 100);
            SqlParameter Salary = cmdInsert.Parameters.Add("@Salary", SqlDbType.Money);
            Name.SourceColumn = "EmpName";
            Salary.SourceColumn = "EmpSalary";
            da.InsertCommand = cmdInsert;

            //Update command for data adapter
            SqlCommand cmdUpdate = new SqlCommand("Update Emp set EmpName =@Name, EmpSalary =@Salary where EmpId=@Id", con);
            SqlParameter Id = cmdUpdate.Parameters.Add("@Id", SqlDbType.Int);
            Name.SourceColumn = "EmpName";
            Salary.SourceColumn = "EmpSalary";
            Id.SourceColumn = "EmpId";
            da.UpdateCommand = cmdUpdate;
}
 private void btnDa_Update_Click(object sender, EventArgs e)
        {
            da.Update(ds,"Emp"); //Exception throw here
        }
    }
}

更新しようとすると、次のようなSqlExceptionことわざが表示されます。

スカラー変数「@Name」を宣言する必要があります。

例外がスローされます

da.update(ds,"Emp") 

データアダプタの方法。理由はわかりません。すべての構文とエラーを確認しましたが、すべて正常に見えますが、それでもエラーがスローされます。私もブレークポイントで試しましたが、運がありませんでした。

4

2 に答える 2

2

挿入コマンドと更新コマンドにSQLパラメーターを追加していません。

cmdUpdate.Parameters.Add(Name);
cmdUpdate.Parameters.Add(Salery);
于 2012-12-25T08:06:54.483 に答える
2

挿入コマンドのパラメーター@Nameおよび@Salaryを次のように宣言しました。

cmdInsert.Parameters.Add("@Name"...

しかし、後でそれらをupdtaeコマンドに使用しようとしています。たとえば、次のように、更新用の新しいパラメータも追加するだけです。

SqlParameter NameUpdate = cmdUpdate.Parameters.Add("@Name", SqlDbType.VarChar, 100);
SqlParameter SalaryUpdate = cmdUpdate.Parameters.Add("@Salary", SqlDbType.Money);
于 2012-12-25T08:08:10.520 に答える