PDA

View Full Version : Error: the variable named ‘@Id’ has already been declared. Variable names must be uniqe within a que



sarehhh
شنبه 12 مرداد 1387, 14:08 عصر
سلام دوستان .

زیر برنامه ی زیر برای اضافه کردن یک رکورد به database می باشد و با هر بار اجرا تنها یک رکورد به database اضافه می کند و چنانچه بخواهم رکورد دیگری اضافه کنم با Error مواجه می شوم و عمل درج رکورد دوم صورت نمی گیره مگر اینکه دوباره برنامه رو Run کنم.

کسی می دونه علت چیه؟

کسی می تونه کمک کنه؟
خیلی ممنون می شم اگه راهنمایی کنید.


Error: the variable named ‘@Id’ has already been declared. Variable names must be uniqe within a query batch or store procedure.

namespace Company

{

public partial class FrmAddAluminium : Form

{

const string _connectionString="server=localhost ; database=Company ; uid=sa ; pwd=sprt&&1363 ";

const string _commandText = "SELECT * " +

"FROM AluminiumBuyTbl "+

"JOIN Person ON AluminiumBuyTbl.Id=Person.Id ";





SqlConnection objConnection = new SqlConnection(_connectionString);

SqlCommand objCommand = new SqlCommand();

SqlDataAdapter objDataAdapter = new SqlDataAdapter(_commandText, _connectionString);

DataSet objDataSet ;

DataView objDataView;






public FrmAddAluminium()

{

InitializeComponent();



}



private void FrmAddAluminium_Load(object sender, EventArgs e)

{

FillDatasetAndDataview();

BindingData();

}



private void FillDatasetAndDataview()

{

objDataSet = new DataSet();

objDataAdapter.Fill(objDataSet, "AluminiumBuyTbl");

objDataView = new DataView(objDataSet.Tables["AluminiumBuyTbl"]);



}

private void BindingData()

{



txtOnUnitCost.DataBindings.Clear();

txtSalesMan.DataBindings.Clear();

txtSumPrice.DataBindings.Clear();

txtWeight.DataBindings.Clear();





txtOnUnitCost.DataBindings.Add("Text", objDataView, "OnUnitCost");

txtSalesMan.DataBindings.Add("Text", objDataView, "SalesMan");

txtSumPrice.DataBindings.Add("Text", objDataView, "SumPrice");

txtWeight.DataBindings.Add("Text", objDataView, "Weight");

}



private void btnAdd_Click(object sender, EventArgs e)

{



Int16 result;

SqlCommand maxIdCommand = new SqlCommand( "SELECT MAX(Id) " +

"FROM AluminiumBuyTbl ", objConnection);

objConnection.Open();

object maxId = maxIdCommand.ExecuteScalar();

int intmaxId = (int)maxId;

string str = (intmaxId+1).ToString();



objCommand.Connection = objConnection;

objCommand.CommandType = CommandType.Text;

objCommand.CommandText = "INSERT INTO AluminiumBuyTbl " +

"(Id ,SalesMan ,OnUnitCost ,Weight ,SumPrice) " +

"VALUES (@Id ,@SalesMan ,@OnUnitCost ,@Weight ,@SumPrice) ";






objCommand.Parameters.AddWithValue("@Id", str).DbType = DbType.Int16 ;

objCommand.Parameters.AddWithValue("@SalesMan", txtSalesMan.Text);

objCommand.Parameters.AddWithValue("@OnUnitCost", txtOnUnitCost.Text).DbType = DbType.Currency;

objCommand.Parameters.AddWithValue("@Weight", txtWeight.Text);

objCommand.Parameters.AddWithValue("@SumPrice", txtSumPrice.Text).DbType=DbType.Currency ;



try

{

objCommand.ExecuteNonQuery();

}

catch (Exception Err)

{

MessageBox.Show(Err.Message);



}



objConnection.Close();



FillDatasetAndDataview();

BindingData();



//Clear frmAddAluminium

txtOnUnitCost.Text = "";

txtSalesMan.Text = "";

txtSumPrice.Text = "";

txtWeight.Text = "";

}

}


}

hdv212
شنبه 12 مرداد 1387, 14:20 عصر
متوجه نشدم objCommand رو در کجا تعریف کردی، به هر صورت از این کد قبل از اضافه کردن پارامترها به objCommand استفاده کن :

objCommand.Parameters.Clear();

naeeme
شنبه 12 مرداد 1387, 14:25 عصر
شما در حقیقت اومدین objCommand رو در داخل کلاس به صورت تعریف و همونجا new کردین. وقتی کار اضافه کردن تموم میشه، objCommand همچنان باقی مونده و مقادیر خودش رو داره. بهتره new کردن objCommand رو در داخل روالتون انجام بدین

sarehhh
شنبه 12 مرداد 1387, 20:08 عصر
مرسی naeeme وhdv212 از راهنماییتون.
مشکل با کمک شما حل شد.:لبخندساده: