程序在附件里,具体的功能是部署WINFORM安装包,要求在安装的时候能够使用SQL SERVER的控制台工具osql.exe。通过-E参数进行信任登陆,通过-i参数让osql.exe去执行一个数据库脚本文件。具体代码:
//得到当前正在运行的程序集实例
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
//得到当前程序集的路径
string Path = assembly.Location;
//去掉本程序集的文件名
Path = Path.Replace("installdb.dll","");
//加上脚本文件的文件名
string SqlPath = Path + "DemoSql.sql";
//创建数据库安装进程
System.Diagnostics.Process P = new Process();
//设定进程参数
P.StartInfo = new ProcessStartInfo("osql.exe"," -E -i "+SqlPath);
//打开进程
P.Start();
但是通过安装包安装完成之后,在SQL企业管理器并没有生成新的数据库,找了很长时间都不知道是何原因,请高手帮我看一下,并说明错在哪里(DemoSql脚本应该具体放在哪个目录?)?谢谢了。100分送上。
//得到当前正在运行的程序集实例
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
//得到当前程序集的路径
string Path = assembly.Location;
//去掉本程序集的文件名
Path = Path.Replace("installdb.dll","");
//加上脚本文件的文件名
string SqlPath = Path + "DemoSql.sql";
//创建数据库安装进程
System.Diagnostics.Process P = new Process();
//设定进程参数
P.StartInfo = new ProcessStartInfo("osql.exe"," -E -i "+SqlPath);
//打开进程
P.Start();
但是通过安装包安装完成之后,在SQL企业管理器并没有生成新的数据库,找了很长时间都不知道是何原因,请高手帮我看一下,并说明错在哪里(DemoSql脚本应该具体放在哪个目录?)?谢谢了。100分送上。
解决方案 »
- C#调用Oracle Function 报非法变量名/编号
- 单击一个菜单栏按钮打开一个网页文件(.htm)
- [C# WinCE控件] 如何设置DoubleBuffered属性?
- 关于继承GridView控件的问题!
- 关于系统的分层
- 100分收购关于.NET/C#方面的技术网站或者Blog!!!大家推荐一下自己经常去的技术网站或者Blog。
- 请教,一个Microsoft visual C#开发界面的问题。
- C#winform中datagridview合并单元格
- 能否将一个hashtable序列化得到一个networkstream?
- 如何取得局域网内所有SQL SERVER的服务器名,并测试连接?
- treeview 键盘选择节点是啥事件?
- 一个小问题
你的安装的文件夹名称最好不要有空格,否则osql.exe可能会执行失败string connStr = string.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", this.Context.Parameters["server"], this.Context.Parameters["user"], this.Context.Parameters["pwd"]);ExecuteSql(connStr, "master", "CREATE DATABASE " + "数据库名称 ");
Process sqlProcess = new Process();
sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
sqlProcess.StartInfo.FileName = "osql.exe";
sqlProcess.StartInfo.Arguments = string.Format("-S {0} -U {1} -P {2} -d {3} -i {4}", "server", "user","pwd", "dbname", "安装文件的路径\*.sql");
sqlProcess.Start();
sqlProcess.WaitForExit();
sqlProcess.Close();
private void ExecuteSql(string connStr, string DatabaseName, string Sql)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(Sql, conn);
conn.Open();
conn.ChangeDatabase(DatabaseName);
try
{
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
EMAIL:[email protected]
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[BookType_table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[BookType_table]
GO
CREATE TABLE [dbo].[BookType_table] (
[BookType] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
但是在脚本面前添加这样的代码就提示什么“未能在sysdatabases中找到数据库'dbbook'所对应的条目,没有找到具有该名称的条目,请确保正确输入了名称”,为什么这样?我添加的脚本也没有错呀。哪个高手指导一下。谢谢。
use master
GO
if exists (select * from sysdatabases where name='dbbook')
drop database dbbook
GO
create database dbbook
GO
use dbbook
GO