2015-11-11 27 views
0

我有一個Visual Fox Pro數據庫,其中我需要添加存儲過程(如果它尚未存在)。我可以使用VFP添加存儲過程,但我想在沒有用戶交互的情況下執行此操作。添加商店使用odbc或vfoledb在Visual Fox Pro數據庫中創建c#代碼的過程

try 
     { 
      using (OdbcConnection conn = new OdbcConnection("Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=NO;SourceDB=" + dbpath + "/sample.dbc")) 
      { 


      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 

     } 

上面是我的代碼打開數據庫。下面是示例存儲過程

Function GetMax(tcTableName, tcFieldName) 
Local Array laMax[1] 
Select Max(&tcFieldName) ; 
    from (m.tcTableName) ; 
    into Array laMax 
Return laMax[1] 
Endfunc 
+0

您正在使用ODBC這是無效的VFP數據庫版本6之後,使用OLEDB代替。除此之外,檢查我給出的示例,它會以這種方式工作(我不會爲該示例代碼創建一個SP,但是如果您願意的話)。 –

+0

非常感謝,我不確定是否可以使用ODBC。再次感謝。 – Baigoo

回答

1

恕我直言,你應該這樣做使用VFP。您可以嘗試使用ExecScript,但我懷疑它會起作用(我還沒有嘗試過)。

編輯:我想這是出於好奇讓我吃驚,它的工作:

static void Main() 
{ 
string myCode = 
@"procedure SPTest(tcTableName) 
select * from (m.tcTableName) into cursor crsTest nofilter 
setresultset('crsTest') 
endproc"; 

File.WriteAllText(@"d:\temp\TestSP.prg",myCode); 

    string strCon = @"Provider=VFPOLEDB;Data Source=d:\temp"; 
    using( OleDbConnection con = new OleDbConnection(strCon)) 
    { 
    con.Open();  
    var xs = new OleDbCommand("TestSP", con); 
    xs.CommandType = CommandType.StoredProcedure; 
    xs.ExecuteNonQuery(); 

    var cmd = new OleDbCommand(@"update ('d:\temp\TestSP.dbc') 
     set Code = ? where ObjectName='StoredProceduresSource'", con); 
    cmd.Parameters.AddWithValue("spCode", myCode); 
    cmd.ExecuteNonQuery(); 
    cmd = new OleDbCommand(@"update ('d:\temp\TestSP.dbc') 
     set Code = ? where ObjectName='StoredProceduresObject'", con); 
    cmd.Parameters.AddWithValue("spCode", File.ReadAllBytes(@"d:\temp\TestSP.fxp")); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
    } 

    DataTable tbl = new DataTable(); 
    using(OleDbConnection con = new OleDbConnection(@"Provider=VFPOLEDB;Data Source=d:\temp\TestSP.dbc")) 
    { 
    var cmd = new OleDbCommand("spTest"); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("spCode", @"d:\temp\MyCustomers"); 
    con.Open(); 
    tbl.Load(cmd.ExecuteReader()); 
    con.Close(); 
    } 
    // LinqPad 
    // tbl.Dump(); 
} 
相關問題