با سلام
من میخوام با یه تکه کد به پایگاه داده وصل شم جهت ذخیره دو رکورد به پایگاه وصل میشم ولی یکی از دستورات خطا میده و نمی شه اطلاعات رو ثبت کرد ممنون میشم کمکم کنید
خطا در دستو DataRow newRow اتفاق می افته
ضمیمه 124966
Printable View
با سلام
من میخوام با یه تکه کد به پایگاه داده وصل شم جهت ذخیره دو رکورد به پایگاه وصل میشم ولی یکی از دستورات خطا میده و نمی شه اطلاعات رو ثبت کرد ممنون میشم کمکم کنید
خطا در دستو DataRow newRow اتفاق می افته
ضمیمه 124966
اینجوری کار نکردم اما ازDataRow شی newRow رو NEW کن ببین درست میشه
ارورشم بذار لطفا"
این قسمت که من تعریف کردم
DataSet ds = new DataSet();
string strsql;
string strcon = "Data Source=VAHID-PC;Initial Catalog=Mali;Integrated Security=True";
SqlDataAdapter da;
SqlConnection con;
DataRow NewRow;
SqlCommandBuilder cd;
زیر datarow newrow خط سبز میکشه
اروور هم این رو میده
ضمیمه 124972
کل دستوراتم اینه
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace Uni
{
public partial class Finance : Form
{
public Finance()
{
InitializeComponent();
}
DataSet ds = new DataSet();
string strsql;
string strcon = "Data Source=VAHID-PC;Initial Catalog=Mali;Integrated Security=True";
SqlDataAdapter da;
SqlConnection con;
DataRow NewRow;
SqlCommandBuilder cd;
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void Finance_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'maliDataSet.Pardakht' table. You can move, or remove it, as needed.
this.pardakhtTableAdapter.Fill(this.maliDataSet.Pa rdakht);
strsql = "SELECT * FROM Pardakht";
con = new SqlConnection(strcon);
con.Open();
da=new SqlDataAdapter(strsql,con);
da = new SqlDataAdapter(strsql, con);
da.Fill(ds, "Pardakht");
textBox25.DataBindings.Add(new Binding("text", ds, "Pardakht.Data1"));
textBox26.DataBindings.Add(new Binding("text", ds, "Pardakht.ID"));
con.Close();
}
private void button11_Click(object sender, EventArgs e)
{
NewRow["Data1"] = Convert.ToInt16(textBox25.Text);
NewRow["ID"] = Convert.ToInt16(textBox26.Text);
ds.Tables["Pardakht"].Rows.Add(NewRow);
cd = new SqlCommandBuilder(da);
da = cd.DataAdapter;
da.Update(ds, "Pardakht");
con.Close();
}
}
سلام بقیه تاپیک هارو که به آشوب کشیدید :دی
شما برای آپدیت دیتابیس برای Update, Insert, Delete باید کوئری هارو تعریف کنید اول.
مثلا برای Insert:
this.oleDbDataAdapter1.InsertCommand = new OleDbCommand("Insert Into TBL(col1,col2) Values(@col1,@col2)", this.oleDbConnection1);
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@col1", dataTable1.Columns[0].DataType).SourceColumn = dataTable1.Columns[0].ColumnName;
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@col2", dataTable1.Columns[1].DataType).SourceColumn = dataTable1.Columns[1].ColumnName;
بعد از اینکه این کارارو برای دو متد دیگه انجام دادید اونوقت متد آپدیت رو فراخونی کنید...
البته بگم که این کدا برای دیتابیس اکسس هستن اما روشش هیچ فرقی نمیکنه :)
سلام
ببخشید دیگه لازم دارم بدجوری
متوجه هم نشدم چطوری باید کار کنم
ببینید کاری نداره مثلا برای جدولی با 5 فیلد: ID, FName, LName, Age, PhoneNo باید 3 کوئری Insert, Delete و Update رو تعریف کنیم:
کل کلاس فرم من اینطوریه که هر کوئری در یکی از متدهای Generate_Delete_Command و Generate_Insert_Command Generate_Update_Command تعریف شده:
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
namespace DBUpdate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dataTable1 = new DataTable();
OleDbConnection oleDbConnection1;
OleDbDataAdapter oleDbDataAdapter1 = new OleDbDataAdapter();
private void Form1_Load(object sender, EventArgs e)
{
this.oleDbConnection1 = new DBConnection().GetOffConnection(Application.Startu pPath + "/db.mdb");
string SelectCommand = "Select * From Table1";
this.oleDbDataAdapter1.SelectCommand = new OleDbCommand(SelectCommand, this.oleDbConnection1);
ReloadDB();
//
//Initialize UPDATE Command.
Generate_Update_Command();
//Initialize INSERT Command.
Generate_Insert_Command();
//Initialize DELETE Command.
Generate_Delete_Command();
}
void ReloadDB()
{
this.dataTable1.Clear();
this.oleDbDataAdapter1.Fill(this.dataTable1);
this.dataGridView1.DataSource = dataTable1;
}
void Generate_Delete_Command()
{
string Command = "Delete From Table1 WHERE ID=@ID";
this.oleDbDataAdapter1.DeleteCommand = new OleDbCommand(Command, this.oleDbConnection1);
this.oleDbDataAdapter1.DeleteCommand.Parameters.Ad dWithValue("@ID", dataTable1.Columns["ID"].DataType).SourceColumn = "ID";
}
void Generate_Update_Command()
{
string Command = "Update Table1 Set [FName]=@FName, [LName]=@LName, [Age]=@Age, [PhoneNo]=@PhoneNo Where [ID]=@ID";
this.oleDbDataAdapter1.UpdateCommand = new OleDbCommand(Command, this.oleDbConnection1);
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@FName", dataTable1.Columns["FName"].DataType).SourceColumn = "FName";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@LName", dataTable1.Columns["LName"].DataType).SourceColumn = "LName";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@Age", dataTable1.Columns["Age"].DataType).SourceColumn = "Age";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@PhoneNo", dataTable1.Columns["PhoneNo"].DataType).SourceColumn = "PhoneNo";
this.oleDbDataAdapter1.UpdateCommand.Parameters.Ad dWithValue("@ID", dataTable1.Columns["ID"].DataType).SourceColumn = "ID";
}
void Generate_Insert_Command()
{
string Command = "INSERT INTO Table1 (FName,LName,Age,PhoneNo) Values(@FName,@LName,@Age,@PhoneNo)";
this.oleDbDataAdapter1.InsertCommand = new OleDbCommand(Command, this.oleDbConnection1);
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@FName", dataTable1.Columns["FName"].DataType).SourceColumn = "FName";
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@LName", dataTable1.Columns["LName"].DataType).SourceColumn = "LName";
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@Age", dataTable1.Columns["Age"].DataType).SourceColumn = "Age";
this.oleDbDataAdapter1.InsertCommand.Parameters.Ad dWithValue("@PhoneNo", dataTable1.Columns["PhoneNo"].DataType).SourceColumn = "PhoneNo";
}
private void button1_Click(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
this.dataGridView1.CommitEdit(DataGridViewDataErro rContexts.Commit);
if (dataGridView1.IsCurrentCellInEditMode)
this.dataGridView1.EndEdit();
Cursor.Current = Cursors.WaitCursor;
int r = this.oleDbDataAdapter1.Update(dataTable1);
ReloadDB();
Cursor.Current = Cursors.Default;
}
}
}
البته باز هم بدلیل سادگی این برنامه با دیتابیس اکسس نوشته شده که گفتم هیچ فرقی در روش نمیکنه.
سورس پروژه هم برای درک بهتر: