完整测试代码:
/// <summary>
/// 分析msSqlServer文件*.sql
/// </summary>
/// <param name="m_SqlFilePath">文件路径</param>
/// <returns></returns>
private string GetExcuteSql(string m_SqlFilePath)
{
string m_ReturnStr="";
StreamReader sr = File.OpenText(m_SqlFilePath);  
string s = sr.ReadLine();  
StringBuilder sb = new StringBuilder();  
while (s != null)  
{  

if(s.Replace(" ","")=="GO")
sb.Append(";");  
else
sb.Append(s);  
s = sr.ReadLine();  
}  
m_ReturnStr = sb.ToString();
sr.Close();    
return m_ReturnStr;   }
/// <summary>
/// 执行一个*.sql文件.注意该操作仅仅适合msSqlServer
/// </summary>
/// <param name="m_Conn">数据连接</param>
/// <param name="m_SqlFilePath">文件路径</param>
private void ExcuteSqlFile(OleDbConnection m_Conn,string m_SqlFilePath)
{
try
{
OleDbCommand m_comm = m_Conn.CreateCommand();
m_comm.CommandText = GetExcuteSql(m_SqlFilePath);
m_comm.ExecuteNonQuery();
MessageBox.Show(m_SqlFilePath+" 文件成功导入");
}catch(OleDbException error)
{
MessageBox.Show(error.Message.ToString());
}
}
/// <summary>
/// 测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, System.EventArgs e)
{
OleDbConnection m_Conn;
try
{
m_Conn = new OleDbConnection("Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=tempdb;Data Source=NETBEE5");
m_Conn.Open();
}catch(OleDbException error)
{
MessageBox.Show(error.Message.ToString());
return;
}
OpenFileDialog dlg = new OpenFileDialog(); 
dlg.Title = "Open text file" ;  
dlg.InitialDirectory = @"c:\" ;  
dlg.Filter = "sql files (*.sql)|*.sql" ;
if(dlg.ShowDialog() == DialogResult.OK)  
{  
  
ExcuteSqlFile(m_Conn,dlg.FileName);
            
}  }

解决方案 »

  1.   

    不行呀,如果在Create Table 后有Create View 的情况,系统会引发一个异常:“第一行不是Create View ”。看样子如果更复杂的情况还要再测试,我相信应有更直接的方法。Microsoft不会不提供这样的方法。但还是谢谢你,结贴时会考虑您的方法。
      

  2.   

    我做了一点改动
    private string GetExcuteSql(string m_SqlFilePath)
    {
    string m_ReturnStr="";
    StreamReader sr = File.OpenText(m_SqlFilePath);  
    string s = sr.ReadLine();  
    StringBuilder sb = new StringBuilder();  
    while (s != null)  
    {  

    if(s.Replace(" ","")=="GO")
    sb.Append(";");  
    else
    sb.Append(s+" ");  
    s = sr.ReadLine();  
    }  
    m_ReturnStr = sb.ToString();
    sr.Close();    
    return m_ReturnStr;  
     }楼主,我是一起执行.创建视图是要这些基本表创建后,创建方能有效.如果分成2个文件,将创建表和创建视图分开.分别执行.就没有问题了.我测试过