public class SqlDataClass
{
public string [,] SqlDataClassArray;
public string[,] SqlDataFlag;
public string[] SqlDataNumber;
public string[,] SqlDataLong;
public SqlDataClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
SqlDataClassArray= new string[,] {{"bigint", "8", "", "", "19","0","是","null","null","否","", "null"},
{"binary", "50", "", "", "0", "0","否","null","null","否","", "null"},
{"bit", "1", "", "", "0", "0","否","null","null","否","", "null"},
{"char", "10", "", "", "0", "0","否","null","null","否","", "" },
{"datetime", "8", "", "", "0", "0","否","null","null","否","", "null"},
{"decimal", "9", "", "", "18","0","是","null","null","否","", "null"},
{"float", "8", "", "", "53","0","否","null","null","否","", "null"},
{"image", "16", "", "", "0", "0","否","null","null","否","", "null"},
{"int", "4", "", "", "10","0","是","null","null","否","", "null"},
{"money", "8", "", "", "19","0","否","null","null","否","", "null"},
{"nchar", "10", "", "", "0", "0","否","null","null","否","", "" },
{"ntext", "16", "", "", "0", "0","否","null","null","否","", "" },
{"numeric", "9", "", "", "18","0","是","null","null","否","", "null"},
{"nvarchar", "50", "", "", "0", "0","否","null","null","否","", "" },
{"real", "4", "", "", "24","0","否","null","null","否","", "null"},
{"smalldatetime", "4", "", "", "0", "0","否","null","null","否","", "null"},
{"smallint", "2", "", "", "5", "0","是","null","null","否","", "null"},
{"smallmoney", "4", "", "", "10","0","否","null","null","否","", "null"},
{"sql_variant", "null","", "", "0", "0","否","null","null","否","", "null"},
{"text", "16", "", "", "0", "0","否","null","null","否","", "" },
{"timestamp", "8", "", "null","0", "0","否","null","null","否","", "null"},
{"tinyint", "1", "", "", "3", "0","是","null","null","否","", "null"},
{"uniqueidentifier","16", "", "", "0", "0","否","null","null","否","", "null"},
{"varbinary", "50", "", "", "0", "0","否","null","null","否","", "null"},
{"varchar", "50", "", "", "0", "0","否","null","null","否","", "" }
};
SqlDataFlag=new string[,] {{"是","1","1"},{"否","null","null"},{"是(不用于复制)","1","1"}};
//SqlDataNumber=new string[]{"decimal","numberic"};
SqlDataLong=new string[,]{{"binary","8000"},{"char","8000"},{"nchar","4000"},{"nvarchar","4000"},{"varbinary","8000"},{"varchar","8000"}};
}
}
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
protected void InitSqlData()
{
this.chbBank.Checked=true;
this.cbDataClass.SelectedIndex=-1;
this.cbKey.Checked=false;
this.txtDefault.Enabled=false;
this.txtDescribe.Enabled=false;
this.txtDecimal.Enabled=false;
this.txtNumber.Enabled=false;
this.txtSeed.Enabled=false;
this.txtIncrement.Enabled=false;
this.cbFlag.Enabled=false;
for(int i=0;i<25;i++)
this.cbDataClass.Items.Add(sqldataclass.SqlDataClassArray[i,0]);
for(int i=0;i<3;i++)
this.cbFlag.Items.Add(sqldataclass.SqlDataFlag[i,0]);
DataColumn 列名=new DataColumn("列名",typeof(string));
MyDataTable.Columns.Add(列名);
DataColumn 数据类型=new DataColumn("数据类型",typeof(string));
MyDataTable.Columns.Add(数据类型);
DataColumn 长度=new DataColumn("长度",typeof(int));
MyDataTable.Columns.Add(长度);
DataColumn 允许为空=new DataColumn("允许为空",typeof(bool));
MyDataTable.Columns.Add(允许为空);
DataColumn 主鍵=new DataColumn("主鍵",typeof(bool));
MyDataTable.Columns.Add(主鍵);
DataColumn 描述=new DataColumn("描述",typeof(string));
MyDataTable.Columns.Add(描述);
DataColumn 默认值=new DataColumn("默认值",typeof(string));
MyDataTable.Columns.Add(默认值);
DataColumn 精度=new DataColumn("精度",typeof(int));
MyDataTable.Columns.Add(精度);
DataColumn 小数位=new DataColumn("小数位",typeof(int));
MyDataTable.Columns.Add(小数位);
DataColumn 标识=new DataColumn("标识",typeof(string));
MyDataTable.Columns.Add(标识);
DataColumn 种子=new DataColumn("种子",typeof(int));
MyDataTable.Columns.Add(种子);
DataColumn 增量=new DataColumn("增量",typeof(int));
MyDataTable.Columns.Add(增量);
MyTableCM=(CurrencyManager)this.BindingContext[MyDataTable];
}
private void btnAdd_Click(object sender, System.EventArgs e)
{
if(this.txtDataName.Text.Trim()==""||this.cbDataClass.Text=="")
{
MessageBox.Show("请您输入列名和数据类型!","错误提示");
}
else
{
char [] findstr={'[',']'};
string DataName=this.txtDataName.Text.Trim();
int NameLong=txtDataName.Text.Trim().Length;
if(DataName.IndexOfAny(findstr,0)>0)
{
MessageBox.Show("您输入的列名不合法,请输入合法的列名(最好用字母,下划线,数字)!","错误提示");
this.txtDataName.Text="";
}
else
{
if(MyDataTable.Rows.Count>0)
{
bool Used=true;
for(int i=0;i<MyDataTable.Rows.Count;i++)
{
if(this.txtDataName.Text.Trim()==MyDataTable.Rows[i][0].ToString())
{
MessageBox.Show(this.txtDataName.Text.Trim()+"列现存在,请用别的列名!","错误提示");
this.txtDataName.Text="";
this.cbDataClass.SelectedIndex=-1;
Used=false;
}
else
{
continue;
}
}
if(Used)
{
AddData();
}
}
else
{
AddData();
}
}
//this.Resultdg.DataSource=MyDataTable;
}
//DataBind();
}
private void cbDataClass_SelectedIndexChanged(object sender, System.EventArgs e)
{
this.txtDefault.Enabled=true;
this.txtDescribe.Enabled=true;
this.txtDecimal.Enabled=true;
this.txtNumber.Enabled=true;
this.txtSeed.Enabled=true;
this.txtIncrement.Enabled=true;
this.cbFlag.Enabled=true;
if(this.cbDataClass.SelectedIndex!=-1)
{
if(sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,1]!="null")
{
this.txtLenth.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,1];
this.txtLenth.Enabled=false;
for(int i=0;i<6;i++)
{
if(this.cbDataClass.SelectedItem.ToString()==sqldataclass.SqlDataLong[i,0])
{
this.txtLenth.Enabled=true;
}
}
}
else
{
this.txtLenth.Enabled=false;
this.txtLenth.Text="0";
}
this.txtDescribe.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,2];
if(sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,2]=="null")
{
this.txtDescribe.Enabled=false;
}
else
{
this.txtDescribe.Enabled=true;
}
if(sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,3]=="null")
{
this.lab.Text="A";
this.txtDefault.Text="";
this.txtDefault.Enabled=false;
}
else
{
this.txtDefault.Text="";
this.txtDefault.Enabled=true;
}
this.txtNumber.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,4];
if(this.cbDataClass.SelectedItem.ToString()=="decimal"||this.cbDataClass.SelectedItem.ToString()=="numberic")
{
this.txtNumber.Enabled=true;
this.txtDecimal.Enabled=true;
}
else
{
this.txtNumber.Enabled=false;
this.txtDecimal.Enabled=false;
}
this.txtDecimal.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,5];
if(sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,6]=="否")
{
this.cbFlag.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,6];
this.cbFlag.Enabled=false;
this.txtSeed.Text="";
this.txtSeed.Enabled=false;
this.txtIncrement.Text="";
this.txtIncrement.Enabled=false;
}
else
{
this.cbFlag.Enabled=true;
this.txtSeed.Enabled=false;
this.txtIncrement.Enabled=false;
this.cbFlag.SelectedIndex=1;
}
this.cbRowGuid.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,9];
if(this.cbDataClass.SelectedItem.ToString()=="uniqueidentifier")
{
this.cbRowGuid.Enabled=true;
this.cbRowGuid.SelectedIndex=1;
}
else
{
this.cbRowGuid.Enabled=false;
}
this.txtFormula.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,10];
this.txtTaxis.Text=sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,11];
if(sqldataclass.SqlDataClassArray[this.cbDataClass.SelectedIndex,11]=="null")
{
this.txtTaxis.Text="";
this.txtTaxis.Enabled=false;
}
else
{
this.txtTaxis.Enabled=true;
}
}
//this.labResult.Text=this.cbFlag.Text.Trim();
}
private void cbFlag_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(this.cbFlag.SelectedIndex==0||this.cbFlag.SelectedIndex==2)
{
if(this.chbBank.Checked==true)
{
MessageBox.Show("此列允许为空不能设置标识!","错误提示");
this.cbFlag.SelectedIndex=1;
}
else if(this.txtDefault.Text=="")
{
this.txtSeed.Enabled=true;
this.txtIncrement.Enabled=true;
this.txtSeed.Text=sqldataclass.SqlDataFlag[this.cbFlag.SelectedIndex,1];
this.txtIncrement.Text=sqldataclass.SqlDataFlag[this.cbFlag.SelectedIndex,2];
this.txtDefault.Text="";
this.txtDefault.Enabled=false;
}
else
{
this.txtSeed.Enabled=false;
this.txtIncrement.Enabled=false;
this.txtSeed.Text="";
this.txtIncrement.Text="";
MessageBox.Show("此列已有默认值,不能再设置标识!","错误提示!");
this.cbFlag.SelectedIndex=1;
}
}
else
{
this.txtSeed.Enabled=false;
this.txtIncrement.Enabled=false;
this.txtSeed.Text="";
this.txtIncrement.Text="";
this.txtDefault.Text="";
this.txtDefault.Enabled=true;
}
}
private void txtNumber_TextChanged(object sender, System.EventArgs e)
{
if(this.cbDataClass.SelectedItem.ToString()=="decimal"||this.cbDataClass.SelectedItem.ToString()=="numberic")
{
try
{
if(int.Parse(this.txtNumber.Text.Trim())>38||int.Parse(this.txtNumber.Text.Trim())<1)
{
MessageBox.Show("精度应为“1-38”内的整数!");
this.txtNumber.Text="18";
}
}
catch(Exception)
{
MessageBox.Show("请您输入有效整数!");
}
}
}
private void txtdecimal_TextChanged(object sender, System.EventArgs e)
{
if(this.cbDataClass.SelectedItem.ToString()=="decimal"||this.cbDataClass.SelectedItem.ToString()=="numberic")
{
try
{
if(int.Parse(this.txtDecimal.Text.Trim())>38||int.Parse(this.txtDecimal.Text.Trim())<0)
{
MessageBox.Show("小数位数应为“1-38”内的整数!");
this.txtDecimal.Text="0";
}
if(int.Parse(this.txtDecimal.Text.Trim())>int.Parse(this.txtNumber.Text.Trim()))
{
MessageBox.Show("小数位数应为1-"+this.txtNumber.Text.Trim());
}
}
catch(Exception)
{
MessageBox.Show("请您输入有效整数!");
}
}
}
private void txtLenth_TextChanged(object sender, System.EventArgs e)
{
if(this.txtLenth.Text=="")
{
MessageBox.Show("请输入数据的长度!","错误提示");
}
else
{
for(int i=0;i<6;i++)
{
if(this.cbDataClass.SelectedItem.ToString()==sqldataclass.SqlDataLong[i,0])
{
if(int.Parse(this.txtLenth.Text.Trim())<1||int.Parse(this.txtLenth.Text.Trim())>int.Parse(sqldataclass.SqlDataLong[i,1]))
MessageBox.Show("该数据的取值范围为1-"+sqldataclass.SqlDataLong[i,1]);
}
}
}
}
private void btnCreate_Click(object sender, System.EventArgs e)
{
Form2 form2=new Form2();
form2.ShowDialog();
if(form2.TableName!="")
{
int TableCount=MyDataTable.Rows.Count;
string strTableName=form2.TableName;
string strKey="";
string strSysSelect=" if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+strTableName+"]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].["+strTableName+"] ";
string strCreatTab="CREATE TABLE [dbo].["+strTableName+"](";
for(int i=0;i<TableCount;i++)
{
string strColName="";
string strClass="";
string strNull="";
string strDefault="";
string strDecimal="";
string strFlag="";
strColName="["+MyDataTable.Rows[i][0].ToString()+"]";
strClass="["+MyDataTable.Rows[i][1].ToString()+"]";
if(MyDataTable.Rows[i][1].ToString()=="numeric"||MyDataTable.Rows[i][1].ToString()=="decimal"||MyDataTable.Rows[i][1].ToString()=="binary"||MyDataTable.Rows[i][1].ToString()=="char"||MyDataTable.Rows[i][1].ToString()=="nchar"||MyDataTable.Rows[i][1].ToString()=="nvarchar"||MyDataTable.Rows[i][1].ToString()=="varbinary"||MyDataTable.Rows[i][1].ToString()=="varchar")
{
if(MyDataTable.Rows[i][1].ToString()=="numeric"||MyDataTable.Rows[i][1].ToString()=="decimal")
{
strDecimal="("+MyDataTable.Rows[i][7].ToString()+","+MyDataTable.Rows[i][8].ToString()+")";
}
else
{
strDecimal="("+MyDataTable.Rows[i][2].ToString()+")";
}
}
else
{
strDecimal="";//" ("+MyDataTable.Rows[i][2].ToString()+") ";
}
if(bool.Parse(MyDataTable.Rows[i][4].ToString()))
{
strKey="constraint pk_"+MyDataTable.Rows[i][0].ToString()+" primary key ("+MyDataTable.Rows[i][0].ToString()+")";
}
else
{
strKey="";
}
if(MyDataTable.Rows[i][6].ToString()=="")
{
strDefault="";
}
else
{
strDefault="default "+MyDataTable.Rows[i][6].ToString();
}
if(MyDataTable.Rows[i][9].ToString()=="否")
{
strFlag="";
}
else if(MyDataTable.Rows[i][9].ToString()=="是(不用于复制)")
{
strFlag="IDENTITY ("+MyDataTable.Rows[i][10].ToString()+","+MyDataTable.Rows[i][11].ToString()+") NOT FOR REPLICATION ";
}
else
{
strFlag="IDENTITY ("+MyDataTable.Rows[i][10].ToString()+","+MyDataTable.Rows[i][11].ToString()+") ";
}
if(i==TableCount-1)
{
strCreatTab=strCreatTab+" "+strColName+" "+strClass+" "+strDecimal+" "+strDefault+" "+strFlag+" "+strNull;
}
else
{
strCreatTab=strCreatTab+" "+strColName+" "+strClass+" "+strDecimal+" "+strDefault+" "+strFlag+" "+strNull+", ";
}
}
if(strKey!="")
{
strCreatTab=strCreatTab+","+strKey+") ";
}
else
{
strCreatTab=strCreatTab+") ";
}
CreatTable(strSysSelect+strCreatTab);
}
else
{
MessageBox.Show("表未生成!您没有输入合法的表名!","错误提示");
}
}
private void CreatTable(string strCreateTable)
{
string sqlstring = strCreateTable;
SqlConnection MyConnection = new SqlConnection("workstation id=PC901;packet size=4096;user id=sa;data source=PC901;persist security info=False;initial catalog=MyDB;");
SqlCommand MyCommand = new SqlCommand(sqlstring, MyConnection);
MyConnection.Open();
MyCommand.ExecuteNonQuery();
MyConnection.Close();
}
private void AddData()
{
DataRow MyDataRow=MyDataTable.NewRow();
MyDataRow["列名"]=this.txtDataName.Text.Trim();
MyDataRow["数据类型"]=this.cbDataClass.Text.Trim();
MyDataRow["长度"]=this.txtLenth.Text.Trim();
if(this.chbBank.Checked==true)
MyDataRow["允许为空"]=true;
else
MyDataRow["允许为空"]=false;
if(this.cbKey.Checked==true)
MyDataRow["主鍵"]=true;
else
MyDataRow["主鍵"]=false;
MyDataRow["描述"]=this.txtDescribe.Text.Trim();
MyDataRow["默认值"]=this.txtDefault.Text.Trim();
MyDataRow["精度"]=this.txtNumber.Text.Trim();
MyDataRow["小数位"]=this.txtDecimal.Text.Trim();
MyDataRow["标识"]=this.cbFlag.Text.Trim();
if(this.txtSeed.Text!=""&&this.txtIncrement.Text!="")
{
MyDataRow["种子"]=int.Parse(this.txtSeed.Text.Trim());
MyDataRow["增量"]=int.Parse(this.txtIncrement.Text.Trim());
}
MyDataTable.Rows.Add(MyDataRow);
MyTableCM.Position=MyTableCM.Count-1;
this.Tabledg.DataSource=MyDataTable;
this.txtDataName.Text="";
this.chbBank.Checked=true;
this.cbKey.Checked=false;
this.cbDataClass.SelectedIndex=-1;
}
private void DataBind()
{
if(MyDataTable.Rows.Count>0)
{
this.txtDataName.DataBindings.Add("Text",MyDataTable,"列名");
this.cbDataClass.DataBindings.Add("Text",MyDataTable,"数据类型");
this.txtLenth.DataBindings.Add("Text",MyDataTable,"长度");
this.chbBank.DataBindings.Add("Checked",MyDataTable,"允许为空");
this.cbKey.DataBindings.Add("Checked",MyDataTable,"主鍵");
this.txtDescribe.DataBindings.Add("Text",MyDataTable,"描述");
this.txtDefault.DataBindings.Add("Text",MyDataTable,"默认值");
this.txtNumber.DataBindings.Add("Text",MyDataTable,"精度");
this.txtDecimal.DataBindings.Add("Text",MyDataTable,"小数位");
this.cbFlag.DataBindings.Add("Text",MyDataTable,"标识");
this.txtSeed.DataBindings.Add("Text",MyDataTable,"种子");
this.txtIncrement.DataBindings.Add("Text",MyDataTable,"增量");
}
}
private void btnUpdate_Click(object sender, System.EventArgs e)
{
}
private void txtDefault_TextChanged(object sender, System.EventArgs e)
{
if(this.cbFlag.SelectedIndex==0||this.cbFlag.SelectedIndex==2)
{
MessageBox.Show("已经设置了标识,不能再有默认值了!","错误提示");
this.txtDefault.Text="";
}
}
private void cbKey_Click(object sender, System.EventArgs e)
{
if(this.cbKey.Checked)
{
if(this.chbBank.Checked)
{
MessageBox.Show("该列允许为空,不能设置为主鍵!","错误提示");
this.cbKey.Checked=false;
}
else if(this.txtDefault.Text!="")
{
MessageBox.Show("该列设置了默认值不能设为主键!","错误提示");
this.cbKey.Checked=false;
}
else
{
int TableCount=MyDataTable.Rows.Count;
for(int i=1;i<TableCount;i++)
{
if(bool.Parse(MyDataTable.Rows[i][4].ToString()))
{
DialogResult Result=MessageBox.Show(MyDataTable.Rows[i][0].ToString()+"已经设置为主鍵了,您是否要修改主鍵","提示信息",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
if(Result==DialogResult.OK)
{
this.txtDefault.Text="";
this.txtDefault.Enabled=false;
MyDataTable.Rows[i][4]=false;
this.cbKey.Checked=true;
}
else
{
this.txtDefault.Text="";
this.txtDefault.Enabled=true;
this.cbKey.Checked=false;
}
}
else
{
this.txtDefault.Text="";
this.txtDefault.Enabled=false;
//MyDataTable.Rows[i][4]=false;
this.cbKey.Checked=true;
}
}
}
}
}
private void chbBank_Click(object sender, System.EventArgs e)
{
if(this.chbBank.Checked)
{
if(this.cbKey.Checked)
{
MessageBox.Show("该列为主键不能设置允许为空!","错误提示");
this.chbBank.Checked=false;
}
else if(this.cbFlag.SelectedIndex==0||this.cbFlag.SelectedIndex==2)
{
MessageBox.Show("该列已经设置了标识不允许空!","错误提示");
this.chbBank.Checked=false;
}
else
{
this.chbBank.Checked=true;
}
}
}
private void txtSeed_TextChanged(object sender, System.EventArgs e)
{
if(this.cbFlag.Enabled)
{
if(int.Parse(this.txtNumber.Text.Trim())<this.txtSeed.Text.Trim().Length)
{
MessageBox.Show("该值必须为数且小于"+this.txtNumber.Text.Trim()+"位!","错误提示");
this.txtSeed.Text="1";
}
}
}
private void txtIncrement_TextChanged(object sender, System.EventArgs e)
{
if(this.cbFlag.Enabled)
{
if(int.Parse(this.txtNumber.Text.Trim())<this.txtIncrement.Text.Trim().Length)
{
MessageBox.Show("该值必须为数且小于"+this.txtNumber.Text.Trim()+"位!","错误提示");
this.txtIncrement.Text="1";
}
}
}
private void btnBind_Click(object sender, System.EventArgs e)
{
this.DataBind();
}
public Form2()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
private void btnOK_Click(object sender, System.EventArgs e)
{
if(this.txtTableName.Text=="")
{
MessageBox.Show("请您输入表名,表名不能为空!","提示信息");
}
else
{
TableName=this.txtTableName.Text.Trim();
Close();
}
}
private void btncancle_Click(object sender, System.EventArgs e)
{
TableName="";
Close();
}
private void txtTableName_TextChanged(object sender, System.EventArgs e)
{
if(this.txtTableName.Text.Trim()!="")
{
char [] findstr={'[',']'};
string TabName=this.txtTableName.Text.Trim();
int NameLong=txtTableName.Text.Trim().Length;
if(TabName.IndexOfAny(findstr,0)>0)
{
MessageBox.Show("您输入的表名不合法,请输入合法的表名(最好用字母,下划线,数字)!","错误提示");
this.txtTableName.Text="";
}
}
}