程序代码如下
现在的结果是只能执行第一条语句
我先建表但是到导入数据时提示表不存在,就是说表还没建完的情况下执行了倒入操作
有没有什么方法能得到语句是不是执行完毕
还有就是导入数据用的是bcp,如何能知道是否倒入完毕。Process p;
p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //
p.StartInfo.RedirectStandardInput = true; //
p.StartInfo.RedirectStandardOutput = true; //
p.StartInfo.CreateNoWindow = true; //Console
p.Start();
string connectionString = "Data Source=server;Initial Catalog=data;User Id=sa;Password=;";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
sql = "drop table b create table b(id varchar(20),name varchar(20))";
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
command = "bcp data..b in c:\\1.csv -c -t, -Sserver -Usa -P";//数据倒入p.StandardInput.WriteLine(command);
sql = "delete from a where exists (select * from b where id=a.id)";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = "update n set n.name=m.name from a n,b m where m.id=n.id";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = "insert a select distinct * from b where not exists (select * from a where id=b.id)";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = "drop table b";
cmd.ExecuteNonQuery();
现在的结果是只能执行第一条语句
我先建表但是到导入数据时提示表不存在,就是说表还没建完的情况下执行了倒入操作
有没有什么方法能得到语句是不是执行完毕
还有就是导入数据用的是bcp,如何能知道是否倒入完毕。Process p;
p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //
p.StartInfo.RedirectStandardInput = true; //
p.StartInfo.RedirectStandardOutput = true; //
p.StartInfo.CreateNoWindow = true; //Console
p.Start();
string connectionString = "Data Source=server;Initial Catalog=data;User Id=sa;Password=;";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
sql = "drop table b create table b(id varchar(20),name varchar(20))";
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
command = "bcp data..b in c:\\1.csv -c -t, -Sserver -Usa -P";//数据倒入p.StandardInput.WriteLine(command);
sql = "delete from a where exists (select * from b where id=a.id)";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = "update n set n.name=m.name from a n,b m where m.id=n.id";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = "insert a select distinct * from b where not exists (select * from a where id=b.id)";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = "drop table b";
cmd.ExecuteNonQuery();
sql = "drop table b create table b(id varchar(20),name varchar(20))";
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
建表后关断开再连接一次试试看,虽然很笨的方法,但可以一试
例如这一段,
cmd.ExecuteNonQuery();
command = "bcp data..b in c:\\1.csv -c -t, -Sserver -Usa -P";//数据倒入p.StandardInput.WriteLine(command);
我以前试过类似的,结果发现p.这一段先执行了,我想process里加上一个wait可能会好一点,后者
把cmd.语句也转换成dos命令行.
你如果是sql的话,你的语法错了,在查询分析器肯定不执行你得话
drop table b
go //这个不加,sql 执行的是整句话,这句就是错的
create table b(id varchar(20),name varchar(20))
sql = "drop table b create table b(id varchar(20),name varchar(20))";
这个语法没错误,
我用你的“drop table b
go //这个不加,sql 执行的是整句话,这句就是错的
create table b(id varchar(20),name varchar(20))
”
报错
我也有和搂住一样的问题,关注中~~~~
go //这个不加,sql 执行的是整句话,这句就是错的
create table b(id varchar(20),name varchar(20))
我是用一个exe执行多个exe的方法,先把整个拆开成多个文件执行,在建个文件顺序执行多个exe,这样就不会出错了。
思路是这样,自己试试吧!