1

Konu: Data type mismatch

web servisten oledb ile fox datasına insert yaparken fox daki date tipindeki field da  Data type mismatch hatası veriyor.

                    string SqlString = "Insert Into fismas (cfisno,dfistar) Values (?,?)";
                    using (OleDbConnection con = new OleDbConnection(foxConStr))
                    {
                        using (OleDbCommand cmd = new OleDbCommand(SqlString, con))
                        {
                            cmd.CommandType = CommandType.Text;
                            cmd.Parameters.AddWithValue("cfisno", FisNo);
                            cmd.Parameters.AddWithValue("dfistar", "{^" + DateTime.Now.ToString("yyyy-MM-dd") + "}");
                            con.Open();
                            cmd.ExecuteNonQuery();
                        }
                    }
parametreli kullandığımda hata veriyor.
ama aşağıdaki kod çalışıyor

                    OleDbCommand cmd = new OleDbCommand("insert into fismas (cfisno,dfistar) values ('" + FisNo + ",{^" + DateTime.Now.ToString("yyyy-MM-dd") + "})", con);

bu kodla işimi hallediyorum ama field lar çok olduğunda kontrol zorlaşıyor.
parametreli nasıl kullanırım?

2

Re: Data type mismatch

c# bilmiyorum ama syntax a baktıgım zaman hata sanki

string SqlString = "Insert Into fismas (cfisno,dfistar) Values (?,?)";

satirindaki ?,? de gibi bunlari once degiskene alip values(?var1,?var2)  gibi denesen

** foxta ki ?m.var1,?m.var2 gibi bir yaklasimla bunu dusundum

3 Son düzenleyen, erdalyalcin (30.10.2008 13:39:49)

Re: Data type mismatch

böyle kullanımıda var , tarih dışında sorunsuz çalışıyor
sorun aslında foxun date tipinde ki veri tipini .net tanımıyor. .net te date tipi yok datetime var

4

Re: Data type mismatch

fox DTOT() var .net i yada c# bilemiyorum sad

Visual Fox Pro
SET HOURS TO 12

? DTOT({^2004-02-16}) && Displays 02/16/2004 12:00:00 AM

5

Re: Data type mismatch

sorun halloldu

cmd.Parameters.AddWithValue("dfistar", DateTime.Now.Date)

DateTime.Now.Date
bizim (vfp) date veri türü

6

Re: Data type mismatch

nede olsa ekip foxtan dtot() u dusunerek DateTime.Now.Date i uretmisler smile

7 Son düzenleyen, cetinbasoz (30.10.2008 14:49:27)

Re: Data type mismatch

Erdal,
Date insert etmeye calisiyorsun ama string gonderiyorsun.  Date(time) gonder. Parametrelerin guzelligi orada sen datetime gondersen de VFP onun date kismini alir.

Senin yaptigin gibi string gondermek istersen (sanmam ama gerekirse aklinda bulunsun - senin calisan kodun baska bir versiyonu):

C#
OleDbCommand cmd = new OleDbCommand(

          String.Format( "insert into fismas (cfisno,dfistar) values ('{0}',{1})",
             FisNo,
             DateTime.Now.ToString("{^yyyy/MM/dd}")),
      con);

Bu da parameters ornegi:

C#
using System;

using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
 
class test
{
  static void Main()
  {
   string strConn = @"Provider=VFPOLEDB;Data source=
C:\Program Files\Microsoft Visual FoxPro 9\Samples\Data\testdata.dbc;"
;
 
  OleDbConnection cn = new OleDbConnection(strConn);
 
   // Prepare command and parameters
   string strInsert = "insert into employee (emp_id,first_name,last_name,birth_date) values (?,?,?,?)";
 
   OleDbCommand cmdStartUp = new OleDbCommand("set null off",cn);
 
   OleDbCommand cmdInsert = new OleDbCommand(strInsert,cn);
   cmdInsert.Parameters.AddRange(
    new OleDbParameter[] {
        new OleDbParameter("emp_id",OleDbType.Char),
    new OleDbParameter("first",OleDbType.Char),
        new OleDbParameter("last",OleDbType.Char),
        }
    );
    cmdInsert.Parameters.AddWithValue("bdate",DateTime.Now);
 
    cn.Open();
    cmdStartUp.ExecuteNonQuery();
    cmdInsert.Parameters["emp_id"].Value = "XXX1";
    cmdInsert.Parameters["first"].Value = "James";
    cmdInsert.Parameters["last"].Value = "Green";
    cmdInsert.ExecuteNonQuery();
    cmdInsert.Parameters["emp_id"].Value = "XXX2";
    cmdInsert.Parameters["first"].Value = "Cetin";
    cmdInsert.Parameters["last"].Value = "Basoz";
    cmdInsert.Parameters["bdate"].Value = new DateTime(1961,1,19);
    cmdInsert.ExecuteNonQuery();
 
 
    DataTable t = new DataTable();
 
    OleDbCommand cmdSelect = new OleDbCommand("select * from employee",cn);
    OleDbDataReader rdr = cmdSelect.ExecuteReader();
    t.Load(rdr);
    rdr.Close();
    cn.Close();
 
    Form f = new ShowDataForm(t,"Employee Table");
    f.ShowDialog();
  }
}
 
public class ShowDataForm : Form
{
  public ShowDataForm(DataTable tbl, string caption)
  {
     this.Text = caption;
     this.ClientSize = new System.Drawing.Size(1024, 768);
     this.dgv = new System.Windows.Forms.DataGridView();
     this.dgv.Dock = DockStyle.Fill;
     this.dgv.DataSource = tbl;
     this.Controls.Add(this.dgv);
  }
  private System.Windows.Forms.DataGridView dgv;
}

8

Re: Data type mismatch

hocam süpersin ya, ne olucak Çetin hoca farkı işte

bu beni çok dertten kurtardı:

OleDbCommand cmdStartUp = new OleDbCommand("set null off", cn);
cmdStartUp.ExecuteNonQuery();

sağol hocam

bu cevabın olmasaydı bunu benim öğrenmem imkansızdı heralde