using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;using System.Data.SqlClient;
public partial class CreateProcedure : System.Web.UI.Page
{
    public string SqlCon;
    public string procedureIns;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
          string   procedure = "SET ANSI_NULLS ON \r\nGO\r\nSET QUOTED_IDENTIFIER ON\r\nGO \r\n-- ============================================= \r\n -- Author: <Author,,Name> \r\n -- Create date: <"+DateTime.Now+"> \r\n -- Description: <Description,,> \r\n -- ============================================= \r\n CREATE PROCEDURE " + "Ins_Name" + "\r\n AS \r\n BEGIN \r\n " + "Ins_Name" + "END \r\n GO";
          //txt_proc.Text = procedure;
        }
    }    protected void btn_Create_Click(object sender, EventArgs e)
    {
        string proc = "";
        string sqlcon = txt_slqCon.Text.ToString();//"server=10.114.72.31;uid=sa;pwd=123;database=wgltest";
        string TableName = txt_tableName.Text.ToString();
        string [] name = TableName.Split(',');        if (sqlcon == "")
        {
            Response.Write("<script>alert('真干人连接串没写')</script>");
        }
        else
        {
            if (name.Length > 0&&name[0]!="")
            {
                for (int i = 0; i < name.Length; i++)
                {
                    DataTable dat = GetColumnNames(sqlcon, name[i].ToString());
                    if (dat.Rows.Count > 0)
                    {
                        proc = proc + "\r\n\r\n" + CreateProc(dat,TableName);
                    }
                    else
                    {
                        Response.Write("<script>alert(‘真干人看看连接串写的对么?')</script>");
                        break;
                    }
                }            }            else
            {
                Response.Write("<script>alert('不写表名你干人啊!')</script>");
            }
            txt_proc.Text = proc;
        }  
          
    }    public DataTable GetColumnNames(string Sqlcon, string TableName)
    {
        DataTable dat = new DataTable();
        try
        {
            SqlConnection con = new SqlConnection(Sqlcon);
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "select a.name,b.name as typename from syscolumns a inner  join systypes  b on a.xtype=b.xusertype inner join sysobjects c on a.id=c.id  where c.name = '"+ TableName + "'";
            SqlDataAdapter sdap = new SqlDataAdapter(cmd);
            sdap.Fill(dat);
            
        }
        catch (Exception ex)
        {
            if (Sqlcon == "")
            {
                Response.Write("<script>alert('干人你到是写个链接串啊')</script>");
            }
            else
            {
                Response.Write("<script>alert('库里也没这表啊')</script>");
            }
        }
        return dat;
    }
    public string CreateProc(DataTable dat,string TableName)
    {
        string Del = "";
        string Upd = "";
        string paramIns = "";
        string parramUpd = "";
        string ziduanIns = "";
        string ziduanpram = "";
        string ziduanUpdParam = "";
        if (dat.Rows.Count > 0)
        {
            string paremDel = "@" + dat.Rows[0]["name"].ToString() + " " + dat.Rows[0]["typename"].ToString();
            for (int i = 1; i < dat.Rows.Count; i++)
            {
                string ParamType = dat.Rows[i]["typename"].ToString();
                if (dat.Rows[i]["typename"].ToString() == "nchar" || dat.Rows[i]["typename"].ToString() == "nvarchar")
                {
                    ParamType = dat.Rows[i]["typename"].ToString() + "(200)";
                }
                paramIns = paramIns + "@" + dat.Rows[i]["name"].ToString() + " " + ParamType + ",\r\n";
                ziduanIns = ziduanIns + dat.Rows[i]["name"].ToString() + ",";
                ziduanpram = ziduanpram + "@" + dat.Rows[i]["name"].ToString() + ",";
                ziduanUpdParam = ziduanUpdParam + dat.Rows[i]["name"].ToString() + "=@" + dat.Rows[i]["name"].ToString() + ",\r\n";            }
            parramUpd = paremDel + ",\r\n" + paramIns;
            procedureIns = "SET ANSI_NULLS ON\r\nGO\r\nSET QUOTED_IDENTIFIER ON\r\nGO\r\n-- ============================================= \r\n-- Author:<Author,,Name>\r\n-- Create date: <" + DateTime.Now + ">\r\n-- Description: <Description,,> \r\n-- =============================================\r\nCREATE PROCEDURE " + "Ins" + TableName + "\r\n" + paramIns.Substring(0, paramIns.Length - 3) + "\r\n AS\r\nBEGIN \r\n " + "insert into" + TableName + "\r\n(" + ziduanIns.TrimEnd(',') + ")\r\nvalues\r\n(" + ziduanpram.TrimEnd(',') + ") \r\n END \r\n GO";            Upd = "SET ANSI_NULLS ON\r\nGO\r\nSET QUOTED_IDENTIFIER ON\r\nGO\r\n-- ============================================= \r\n-- Author: <Author,,Name>\r\n-- Create date: <" + DateTime.Now + ">\r\n-- Description: <Description,,> \r\n-- =============================================\r\nCREATE PROCEDURE " + "Upd" + TableName + "\r\n" + parramUpd.Substring(0, parramUpd.Length - 3) + "\r\nAS\r\nBEGIN\r\n" + " update\r\n" + TableName + "\r\nset\r\n" + ziduanUpdParam.Substring(0, ziduanUpdParam.Length - 3) + "\r\nwhere\r\n" + dat.Rows[0][0].ToString() + "=@" + dat.Rows[0][0].ToString() + "\r\nEND \r\nGO";            Del = "SET ANSI_NULLS ON\r\nGO\r\nSET QUOTED_IDENTIFIER ON\r\nGO\r\n-- ============================================= \r\n-- Author: <Author,,Name>\r\n--Create date: <" + DateTime.Now + ">\r\n-- Description: <Description,,> \r\n-- =============================================\r\nCREATE PROCEDURE " + "Del" + TableName + "\r\n" + paremDel + "\r\nAS\r\nBEGIN\r\n" + " delete from  " + TableName + "\r\n" + "where ID_i=" + dat.Rows[0][0].ToString() + "\r\nEND \r\nGO";
        }
        return procedureIns + "\r\n\r\n" + Upd + "\r\n\r\n" + Del + "\r\n\r\n";
    }
}