C# ASP.NETC和Microsoft SQL连接

C# ASP.NETC和Microsoft SQL连接,c#,asp.net,sql-server,c#-4.0,C#,Asp.net,Sql Server,C# 4.0,我的项目在asp.net的webform1中,包括一个文本框和一个保存 按钮,当用户在文本框中输入某个国家的名称时 单击“保存”按钮,名称应保存在名为的数据库表中 国 然后在webform2中,保存的国家/地区应该加载到页面加载的dropdownlist中,然后应该有一些文本框,用户可以在其中 在下拉列表中输入所选国家/地区的状态, 在webform3的最后一个国家中,当用户选择一个国家时,它应该在另一个国家中加载该国家的状态 dropdownlist和当用户从第二个dropdownlist和

我的项目在asp.net的webform1中,包括一个文本框和一个保存 按钮,当用户在文本框中输入某个国家的名称时 单击“保存”按钮,名称应保存在名为的数据库表中 国 然后在webform2中,保存的国家/地区应该加载到页面加载的dropdownlist中,然后应该有一些文本框,用户可以在其中 在下拉列表中输入所选国家/地区的状态, 在webform3的最后一个国家中,当用户选择一个国家时,它应该在另一个国家中加载该国家的状态 dropdownlist和当用户从第二个dropdownlist和 输入该州的城市,该城市应通过以下方式保存在数据库中: 单击保存按钮。 我在运行webform2时遇到问题,国家会在下拉列表1中加载,但当我选择一个国家时,它不会加载 该国家的州在下拉列表2中。 有什么帮助吗? 这是我到目前为止的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

namespace assign1 {
    public partial class city: System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            if (IsPostBack == false) {
                SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand("SELECT CName,CID FROM country", conn);

                DataTable dt = new DataTable();
                da.Fill(dt);

                ddlCountry.DataSource = dt;
                ddlCountry.DataTextField = "CName";
                ddlCountry.DataValueField = "CID";
                ddlCountry.DataBind();
            }


        }

        protected void btnSave_Click(object sender, EventArgs e) {
            SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");

            SqlCommand cmd = new SqlCommand("INSERT INTO city(CIName,SID,CID) Values('" + txtCity.Text + "','" + ddlState.SelectedIndex + "','" + ddlCountry.SelectedIndex + "')", conn);




            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

        }

        protected void ddlState_SelectedIndexChanged(object sender, EventArgs e) {
            /* SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = new SqlCommand("SELECT SName,SID FROM state", conn);

            DataTable dt = new DataTable();
            da.Fill(dt);

            ddlState.DataSource = dt;
            ddlState.DataTextField = "SName";
            ddlState.DataValueField = "SID";
            ddlState.DataBind(); */

        }

        protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e) {
            SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = new SqlCommand("SELECT SName,SID FROM state", conn);

            DataTable dt = new DataTable();
            da.Fill(dt);

            ddlState.DataSource = dt;
            ddlState.DataTextField = "SName";
            ddlState.DataValueField = "SID";
            ddlState.DataBind();
        }
    }
}


----------
当您收到ddlCountry_SelectedIndexChanged时,您需要准备一个查询,只选择属于当前所选国家的州

所以你的代码应该是

protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e) 
{
     using(SqlConnection conn = new SqlConnection(.....))
     using(SqlDataAdapter da = new SqlDataAdapter())
     {
        string cmdText = @"SELECT SName,SID FROM state WHERE CID=@country";
        da.SelectCommand = new SqlCommand(cmdText, conn);
        da.SelectCommand.Parameters.Add("@country", SqlDbType.Int).Value = ddlCountry.SelectedValue;
        DataTable dt = new DataTable();
        da.Fill(dt);
        ddlState.DataSource = dt;
        ddlState.DataTextField = "SName";
        ddlState.DataValueField = "SID";
        ddlState.DataBind();
    }
 }
这里的查询文本不是通过串接字符串构建的,而是使用参数占位符,其中CID=@country,然后将所需的参数与确切的数据类型(我假设是一个整数)一起添加到SelectCommand的参数集合中

关于using语句,也可以说几句话。这是使用一次性对象的首选方法,因为使用块确保在退出块时处理对象


最后,您的连接字符串应该存储在web.config文件中,否则,如果您需要更改此字符串的任何详细信息,您必须在应用程序中搜索硬编码该字符串的每个位置。您可以使用ASP.NET的ajax更新面板 这将彻底解决这个问题
在触发器中,您可以指定选定的索引更改事件

选择特定国家的状态需要设置条件“国家=??”???否则,将加载表中的每个状态。现在是这样吗?表状态的结构是什么?表状态我使用了来自country tableSqlConnection conn=new SqlConnectionData Source=HAFIZ_HARRON的stateid、stateName和countryid;数据库=7学期;综合安全=真实;SqlDataAdapter da=新的SqlDataAdapter;da.SelectCommand=new-SqlCommandSELECT-SName,来自CID=,conn的状态的SID;DataTable dt=新的DataTable;da.Filldt;如何设置国家/地区的条件da.SelectCommand=new-SqlCommandSELECT-SName,SID-FROM-state-WHERE-CID=?,conn???