ASP.Net C#和Microsoft SQL连接

时间:2015-09-05 14:59:44

标签: c# asp.net sql-server c#-4.0

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

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();
        }
    }
}


----------

2 个答案:

答案 0 :(得分:2)

当您收到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();
    }
 }

此处查询文本不是构建串联字符串,而是使用参数占位符(WHERE CID = @ country)然后添加精确数据类型所需的参数(我假设一个整数)到SelectCommand的Parameters集合。

关于using语句的几句话。这是使用一次性物体的优选方式,因为使用块确保在离开块时放置物体。

最后,您的连接字符串应存储在web.config文件中,否则,如果您需要更改此字符串的任何详细信息,则必须搜索应用中您硬编码该字符串的每个位置< / p>

答案 1 :(得分:0)

您可以使用ASP.NET的ajax更新面板 它会彻底解决问题 在触发器中,您可以指定所选索引已更改事件