PDA

View Full Version : سوال: خطا در ارتباط با پایگاه داده



vahidganji
یک شنبه 04 آبان 1393, 14:39 عصر
با سلام
من میخوام با یه تکه کد به پایگاه داده وصل شم جهت ذخیره دو رکورد به پایگاه وصل میشم ولی یکی از دستورات خطا میده و نمی شه اطلاعات رو ثبت کرد ممنون میشم کمکم کنید
خطا در دستو DataRow newRow اتفاق می افته
124966

RIG000
یک شنبه 04 آبان 1393, 16:02 عصر
اینجوری کار نکردم اما از
DataRow شی newRow رو NEW کن ببین درست میشه

ارورشم بذار لطفا"

vahidganji
یک شنبه 04 آبان 1393, 16:11 عصر
این قسمت که من تعریف کردم
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

vahidganji
یک شنبه 04 آبان 1393, 16:11 عصر
اینجوری کار نکردم اما از
DataRow شی newRow رو NEW کن ببین درست میشه


با حروف بزرگ هم جواب نداد

vahidganji
یک شنبه 04 آبان 1393, 16:16 عصر
کل دستوراتم اینه

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();
}
}

pedram.11
یک شنبه 04 آبان 1393, 20:37 عصر
سلام بقیه تاپیک هارو که به آشوب کشیدید :دی
شما برای آپدیت دیتابیس برای 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;
بعد از اینکه این کارارو برای دو متد دیگه انجام دادید اونوقت متد آپدیت رو فراخونی کنید...
البته بگم که این کدا برای دیتابیس اکسس هستن اما روشش هیچ فرقی نمیکنه :)

vahidganji
دوشنبه 05 آبان 1393, 08:22 صبح
سلام
ببخشید دیگه لازم دارم بدجوری
متوجه هم نشدم چطوری باید کار کنم

pedram.11
دوشنبه 05 آبان 1393, 09:08 صبح
ببینید کاری نداره مثلا برای جدولی با 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;
}
}
}


البته باز هم بدلیل سادگی این برنامه با دیتابیس اکسس نوشته شده که گفتم هیچ فرقی در روش نمیکنه.

سورس پروژه هم برای درک بهتر: