باسلام
در یک پروژه نیاز دارم تا اطلاعات از دیتا گرید ویو به فایل اکسس انتقال و ذخیره سلزی شود در حال حاضر از کد زیر استفاده میکنم اما با خطا مواجه میشم در صورتی که اگر خروجی را در sql بگیرم و کپی و در اکسس past کنم مشکلی مشاهده نمیشود ممنون میشم راهنمایی بفرمایید.
کدپروژه :
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Linq;
using Spire.DataExport.Access;
namespace Ttms_Kharid
{
public partial class TtmsForm : Form
{
public TtmsForm()
{
InitializeComponent();
}
private void Runbutton_Click(object sender, EventArgs e)
{
if (KindcomboBox.SelectedIndex == 0)
{
SqlConnection myConn = new SqlConnection("Password=803;Persist Security Info=True;User ID=ADMIN;" +
"Initial Catalog=IFS_803;Data Source=.");
myConn.Open();
SqlCommand mycom = new SqlCommand("dbo.TTMS_Kharid", myConn)
{ CommandType = CommandType.StoredProcedure };
mycom.Parameters.Add("@Fpid", SqlDbType.Int).Value = Convert.ToInt32(FpidcomboBox.SelectedValue);
mycom.Parameters.Add("@Scode", SqlDbType.Int).Value = ScodecomboBox.Text.Trim();
DataTable dt = new DataTable();
SqlDataAdapter ada = new SqlDataAdapter(mycom);
ada.Fill(dt);
TtmsdataGridView.DataSource = dt;
}
if (KindcomboBox.SelectedIndex == 1)
{
SqlConnection myConn = new SqlConnection("Password=803;Persist Security Info=True;User ID=ADMIN;" +
"Initial Catalog=IFS_803;Data Source=.");
myConn.Open();
SqlCommand mycom = new SqlCommand("dbo.TTMSGH", myConn)
{ CommandType = CommandType.StoredProcedure };
mycom.Parameters.Add("@Fpid", SqlDbType.Int).Value = Convert.ToInt32(FpidcomboBox.SelectedValue);
mycom.Parameters.Add("@Scode", SqlDbType.Int).Value = ScodecomboBox.Text.Trim();
if (ScodecomboBox.Text.Trim() == "1")
{
mycom.Parameters.Add("@Tdate", SqlDbType.NVarChar).Value = $"{FpidcomboBox.SelectedItem}/03/31";
}
if (ScodecomboBox.Text.Trim() == "2")
{
mycom.Parameters.Add("@Tdate", SqlDbType.NVarChar).Value = FpidcomboBox.SelectedText + "/06/31";
}
if (ScodecomboBox.Text.Trim() == "3")
{
mycom.Parameters.Add("@Tdate", SqlDbType.NVarChar).Value = FpidcomboBox.SelectedText + "/09/30";
}
if (ScodecomboBox.Text.Trim() == "4")
{
mycom.Parameters.Add("@Tdate", SqlDbType.NVarChar).Value = FpidcomboBox.SelectedText + "/12/29";
}
DataTable dt = new DataTable();
SqlDataAdapter ada = new SqlDataAdapter(mycom);
ada.Fill(dt);
TtmsdataGridView.DataSource = dt;
}
}
private void TtmsForm_Load(object sender, EventArgs e)
{
SqlConnection myConn = new SqlConnection("Password=803;Persist Security Info=True;User ID=ADMIN;" +
"Initial Catalog=IFS_803;Data Source=.");
DataTable dt = new DataTable();
SqlDataAdapter ada = new SqlDataAdapter("select id,name from __fiscalperiod__ where id <>0", myConn);
ada.Fill(dt);
FpidcomboBox.DataSource = dt;
FpidcomboBox.DisplayMember = "name";
FpidcomboBox.ValueMember = "id";
KindcomboBox.Items.Add(Convert.ToString("خرید"));
KindcomboBox.Items.Add(Convert.ToString("قرارداد"));
}
private DataTable GetDataTableFromDGV(DataGridView dgv)
{
var dt = new DataTable();
foreach (DataGridViewColumn column in dgv.Columns)
{
if (column.Visible)
{
dt.Columns.Add();
}
}
object[] cellValues = new object[dgv.Columns.Count];
foreach (DataGridViewRow row in dgv.Rows)
{
for (int i = 0; i < row.Cells.Count; i++)
{
cellValues[i] = row.Cells[i].Value;
}
dt.Rows.Add(cellValues);
}
return dt;
}
private void Exportbutton_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
if (KindcomboBox.SelectedIndex == 1)
{
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + openFileDialog1.FileName + ";Persist Security Info=True");
DataTable dt = new DataTable();
dt = GetDataTableFromDGV(TtmsdataGridView);
OleDbCommand com = new OleDbCommand();
com.CommandType = CommandType.Text;
com.Connection = cn;
int dtc = dt.Rows.Count;
MessageBox.Show($"{dtc}");
cn.Open();
for (int j = 0; j < (TtmsdataGridView.ColumnCount); j++)
for (int i = 0; i < (TtmsdataGridView.Rows.Count); i++)
{
com.CommandText = "INSERT INTO Kharid_Detail(" + TtmsdataGridView.Columns[j].Name.Trim() + ")VALUES(" + TtmsdataGridView.Rows[i].Cells[j].Value + ")";
com.ExecuteNonQuery();
}
MessageBox.Show("اطلاعات با موفقیت درج گردید");
}
if (KindcomboBox.SelectedIndex == 0)
{
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + openFileDialog1.FileName + ";Persist Security Info=True");
cn.Open();
DataTable dt = new DataTable();
dt = GetDataTableFromDGV(TtmsdataGridView);
OleDbCommand com = new OleDbCommand();
com.CommandType = CommandType.Text;
com.Connection = cn;
for (int j = 0; j < (TtmsdataGridView.ColumnCount); j++)
for (int i = 0; i < (TtmsdataGridView.Rows.Count); i++)
{
com.CommandText = "INSERT INTO Kharid_Detail(" + TtmsdataGridView.Columns[j].Name.Trim() + ")VALUES(" + TtmsdataGridView.Rows[i].Cells[j].Value + ")";
com.ExecuteNonQuery();
}
int dtc = dt.Rows.Count;
MessageBox.Show($"تعداد {dtc} رکورد در مسیر انتخابی درج گردید");
}
}
}
}
خطا:
System.Data.OleDb.OleDbException: 'You must enter a value in the 'Kharid_Detail.KalaKhadamatName' field.'