当前位置:编程学习 > C#/ASP.NET >>

菜鸟问题,求高人指点



aspx代码如下
<%@ Page language="c#" Codebehind="ch4_3.aspx.cs" AutoEventWireup="false"

    Inherits="CH04.ch4_3" %>

    <HTML>

    <body MS_POSITIONING="GridLayout">

    <form runat="server" ID="Form1">

    <h3><font face="宋体">插入具有验证的数据行</font></h3>

    <table width="95%">

    <tr>

    <td valign="top">

    <ASP:DataGrid id="MyDataGrid" runat="server" EnableViewState="false" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="宋体" CellSpacing="0" CellPadding="3" ShowFooter="false" BorderColor="black" BackColor="#ccccff" Width="592px"></ASP:DataGrid>

    </td>

    <td valign="top">

    <table style="FONT: 9pt 宋体; WIDTH: 322px; HEIGHT: 384px">

    <tr>

    <td colspan="2" bgcolor="#aaaadd" style="FONT:10.5pt 宋体">添加新作者:</td>

    </tr>

    <tr>

    <td nowrap>作者 ID:</td>

    <td>

    <input type="text" id="au_id" value="000-00-0000" runat="server"

    NAME="au_id">

    <asp:RequiredFieldValidator id="au_idReqVal" ControlToValidate=

    "au_id" Display="Static" Font-Name="Verdana" Font-Size="12"

    runat="server">  * </asp:RequiredFieldValidator>

    </td>

    </tr>

    <tr>

    <td nowrap>姓氏:</td>

    <td>

    <input type="text" id="au_lname" value="Doe" runat="server" NAME=

    "au_lname">

    <asp:RequiredFieldValidator id="au_lnameReqVal" ControlToValidate=

    "au_lname" Display="Static" Font-Name="Verdana" Font-Size="12"

    runat="server">  * </asp:RequiredFieldValidator>

    </td>

    </tr>

    <tr>

    <td nowrap>名字:</td>

    <td>

    <input type="text" id="au_fname" value="John" runat="server"

    NAME="au_fname">

    <asp:RequiredFieldValidator id="au_fnameReqVal" ControlToValidate=

    "au_fname" Display="Static" Font-Name="Verdana" Font-Size="12"

    runat="server">   * </asp:RequiredFieldValidator>

    </td>

    </tr>

    <tr>

    <td>电话:</td>

    <td><nobr> <input type="text" id="phone" value="808 555-5555"

    runat="server" NAME="phone">

    <asp:RequiredFieldValidator id="phoneReqVal" ControlToValidate=

    "phone" Display="Static" Font-Name="Verdana" Font-Size="12"

    runat="server">  * </asp:RequiredFieldValidator></nobr>

    </td>

    </tr>

    <tr>

    <td>地址:</td>

    <td><input type="text" id="address" value="One Microsoft Way" runat="server" NAME="address"></td>

   </tr>

   <tr>

   <td>城市:</td>

   <td><input type="text" id="city" value="Redmond" runat="server"

   NAME="city"></td>

   </tr>

   <tr>

   <td>州:</td>

   <td>

   <select id="state" runat="server" NAME="state">

    <option selected>CA</option>

    <option>IN</option>

    <option>KS</option>

    <option>MD</option>

    <option>MI</option>

    <option>OR</option>

    <option>TN</option>

    <option>UT</option>

   </select>

   </td>

   </tr>

   <tr>

   <td nowrap>邮政编码:</td>

   <td><input type="text" id="zip" value="98005" runat="server"

   NAME="zip"></td>

   </tr>

   <tr>

<td>协定:</td>

   <td>

    <select id="contract" runat="server" NAME="contract">

    <option value="0" selected>假</option>

    <option value="1">真</option>

    </select>

   </td>

   </tr>

   <tr>

   <td></td>

   <td style="PADDING-TOP:15px">

    <input type="submit" OnServerClick="AddAuthor_Click" value="

    添加作者" runat="server" ID="Submit1" NAME="Submit1">

   </td>

   </tr>

   <tr>

   <td colspan="2" style="PADDING-TOP:15px" align="center">

   <span id="Message" EnableViewState="false" runat="server" />

   <asp:RegularExpressionValidator id="RegularExpressionValidator1"

   ASPClass="RegularExpressionValidator" ControlToValidate="zip"

   ValidationExpression ="[0-9]{5}" Display="Dynamic" Font-Name=

   "Arial" Font-Size="11" runat="server"> * 邮政编码必须是 5 位数字<br>

   </asp:RegularExpressionValidator>

 <asp:RegularExpressionValidator id="phoneRegexVal" ControlToValidate=

    "phone" ValidationExpression="[0-9]{3} [0-9]{3}-[0-9]{4}" Display=

    "Dynamic" Font-Name="Arial" Font-Size="11" runat="server"> * 电

    话号码格式必须为:XXX XXX-XXXX <br>

    </asp:RegularExpressionValidator>

    <asp:RegularExpressionValidator id="au_idRegexVal" ControlToValidate="au_id" ValidationExpression="[0-9]{3}-[0-9]{2}-[0-9]{4}" Display="Dynamic" Font-Name="Arial" Font-Size="11" runat="server"> * 作者 ID 必须是数字:XXX-XX-XXXX <br></asp:RegularExpressionValidator>

    </td>

    </tr>

    </table>

    </td>

    </tr>

    </table>

    </form>

    </body>

    </HTML>


aspx.cs代码
using System;

    using System.Collections;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Web;

    using System.Web.SessionState;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.HtmlControls;

    using System.Data.SqlClient;

    namespace CH04

    {

    /// <summary>

    /// CH4_3 的摘要说明

    /// </summary>

    public partial class ch4_3 : System.Web.UI.Page

    {

    protected System.Web.UI.WebControls.DataGrid MyDataGrid;

    protected System.Web.UI.WebControls.RequiredFieldValidator au_idReqVal;

    protected System.Web.UI.WebControls.RequiredFieldValidator au_lnameReqVal;

    protected System.Web.UI.WebControls.RequiredFieldValidator au_fnameReqVal;

    protected System.Web.UI.WebControls.RequiredFieldValidator phoneReqVal;

    protected System.Web.UI.WebControls.RegularExpressionValidator

    RegularExpressionValidator1;

    protected System.Web.UI.WebControls.RegularExpressionValidator phoneRegexVal;

    protected System.Web.UI.WebControls.RegularExpressionValidator

    au_idRegexVal;

    protected System.Web.UI.HtmlControls.HtmlInputText au_id;
protected System.Web.UI.HtmlControls.HtmlInputText au_lname;protected System.Web.UI.HtmlControls.HtmlInputText au_fname;protected System.Web.UI.HtmlControls.HtmlInputText phone;

 protected System.Web.UI.HtmlControls.HtmlInputText address;protected System.Web.UI.HtmlControls.HtmlInputText city;

 protected System.Web.UI.HtmlControls.HtmlSelect state;

 protected System.Web.UI.HtmlControls.HtmlInputText zip;

 protected System.Web.UI.HtmlControls.HtmlSelect contract;

 protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;protected System.Web.UI.HtmlControls.HtmlGenericControl Message;
        
 SqlConnection myConnection;

 private void Page_Load(object sender, System.EventArgs e)

 {

    // 在此处放置用户代码以初始化页面

     myConnection = new SqlConnection("server=localhost;initial catalog=pubs;user id=sa;password=Passw02d;Trusted_Connection=yes");
    if (!IsPostBack)

    BindGrid();

 }

 public void BindGrid()

 {

    SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);

    DataSet ds = new DataSet();

    myCommand.Fill(ds, "Authors");

    MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;

    MyDataGrid.DataBind();

 }

 public void AddAuthor_Click(object sender, System.EventArgs e){

    Message.InnerHtml = "";

    if (Page.IsValid)

    {

    String insertCmd = "insert into Authors (au_id, au_lname,au_fname, phone, address, city, state, zip, contract) values (@Id,@LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)";

    SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);

    myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

    myCommand.Parameters["@Id"].Value = au_id.Value;

    myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));

    myCommand.Parameters["@LName"].Value = au_lname.Value;

    myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));

    myCommand.Parameters["@FName"].Value = au_fname.Value;

    myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));

    myCommand.Parameters["@Phone"].Value = phone.Value;

    myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));

    myCommand.Parameters["@Address"].Value = address.Value;

    myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));

    myCommand.Parameters["@City"].Value = city.Value;

    myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));

    myCommand.Parameters["@State"].Value = state.Value;

    myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));

    myCommand.Parameters["@Zip"].Value = zip.Value;

    myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));

    myCommand.Parameters["@Contract"].Value = contract.Value;

    myCommand.Connection.Open();

    try

    {

    myCommand.ExecuteNonQuery();

    Message.InnerHtml = "<b>已添加记录</b><br>" + insertCmd + "<p>";

    }

    catch (SqlException e1)

    {

    if (e1.Number == 2627)

    Message.InnerHtml = "错误:已存在具有相同主键的记录<p>";

    else

    Message.InnerHtml="错误:未能添加记录,请确保正确填写了字段<p>";

    Message.Style["color"] = "red";

    }

    myCommand.Connection.Close();

    }

    BindGrid();

    }

    }

    }
--------------------编程问答-------------------- 刚开始学 虚心求教 请勿喷 求指点啊 --------------------编程问答-------------------- 没有看你的代码,我也有试过这样的错误,应该是你的页面没有接受到某一个参数打开之后就会是这样的 --------------------编程问答--------------------
引用 2 楼 qq386707112 的回复:
没有看你的代码,我也有试过这样的错误,应该是你的页面没有接受到某一个参数打开之后就会是这样的


应该怎么解决呢,目前一点头绪都没有啊 --------------------编程问答-------------------- 提示空指针错误, 断点下看看 myConnection 的  Connection 属性是否已经复制。
--------------------编程问答-------------------- SqlConnection myConnection; 
改为:
SqlConnection myConnection = new SqlConnection();  --------------------编程问答-------------------- 把要把书里的东西带到程序里去 --------------------编程问答--------------------  protected System.Web.UI.WebControls.DataGrid MyDataGrid;
 
    protected System.Web.UI.WebControls.RequiredFieldValidator au_idReqVal;
 
    protected System.Web.UI.WebControls.RequiredFieldValidator au_lnameReqVal;
 
    protected System.Web.UI.WebControls.RequiredFieldValidator au_fnameReqVal;
 
    protected System.Web.UI.WebControls.RequiredFieldValidator phoneReqVal;
 
    protected System.Web.UI.WebControls.RegularExpressionValidator


vs不会这样去定义的
--------------------编程问答--------------------
引用 5 楼 hdhai9451 的回复:
SqlConnection myConnection; 
改为:
SqlConnection myConnection = new SqlConnection(); 


非常感谢 

但是现在出现另外一个错误 --------------------编程问答-------------------- 还要这个打开数据库
直接
myConnection.open() --------------------编程问答--------------------
引用 9 楼 liuchaolin 的回复:
还要这个打开数据库
直接
myConnection.open()


改了,问题依旧 --------------------编程问答--------------------  myConnection = new SqlConnection("server=localhost;initial catalog=pubs;user id=sa;password=Passw02d;Trusted_Connection=yes");
myConnection.open()

这样总可以吧 --------------------编程问答-------------------- 你好根据我的分析,你用了两次数据库的操作,一次插入数据,一次绑定数据
但是你使用的都是同一个数据连接。
建议:
 private void Page_Load(object sender, System.EventArgs e)
 
 {
 
    // 在此处放置用户代码以初始化页面
 
     myConnection = new SqlConnection("server=localhost;initial catalog=pubs;user id=sa;password=Passw02d;Trusted_Connection=yes");
    if (!IsPostBack)
 
    BindGrid();
 
 }

1:数据库链接不要在form_load中初始化,建议每次数据库操作的时候都做一下new的实例化操作
2:正确的数据库操作不能缺少try catch语句
范例代码如下:
其中要带有conn.open()这是开启数据库连接
conn.close()这是关闭数据库连接

OracleConnection conn = null;
            DataTable dataTable = null;
            try
            {
                conn = new OracleConnection(conStr);
                conn.Open();
                OracleCommand cmd = new OracleCommand();
                cmd.CommandText = sqlText;
                cmd.Connection = conn;
                if (parms != null && parms.Count > 0)
                {
                    cmd.Parameters.AddRange(parms.ToArray());
                }
                OracleDataAdapter oda = new OracleDataAdapter(cmd);
                DataSet dataSet = new DataSet();
                oda.Fill(dataSet);
                dataTable = dataSet.Tables[0];
            }
            catch (Exception ex)
            {
                //log.Error(sqlText);
                //log.Error(ex.Message);
                throw ex;
            }
            finally
            {
                conn.Close();
            }

--------------------编程问答--------------------
引用 12 楼 ghypnus 的回复:
你好根据我的分析,你用了两次数据库的操作,一次插入数据,一次绑定数据
但是你使用的都是同一个数据连接。
建议:
 private void Page_Load(object sender, System.EventArgs e)
 
 {
 
    // 在此处放置用户代码以初始化页面
 
     myConnection = new SqlConnection("server=localhost;initial catalog=pubs;user id=sa;password=Passw02d;Trusted_Connection=yes");
    if (!IsPostBack)
 
    BindGrid();
 
 }

1:数据库链接不要在form_load中初始化,建议每次数据库操作的时候都做一下new的实例化操作
2:正确的数据库操作不能缺少try catch语句
范例代码如下:
其中要带有conn.open()这是开启数据库连接
conn.close()这是关闭数据库连接

OracleConnection conn = null;
            DataTable dataTable = null;
            try
            {
                conn = new OracleConnection(conStr);
                conn.Open();
                OracleCommand cmd = new OracleCommand();
                cmd.CommandText = sqlText;
                cmd.Connection = conn;
                if (parms != null && parms.Count > 0)
                {
                    cmd.Parameters.AddRange(parms.ToArray());
                }
                OracleDataAdapter oda = new OracleDataAdapter(cmd);
                DataSet dataSet = new DataSet();
                oda.Fill(dataSet);
                dataTable = dataSet.Tables[0];
            }
            catch (Exception ex)
            {
                //log.Error(sqlText);
                //log.Error(ex.Message);
                throw ex;
            }
            finally
            {
                conn.Close();
            }


谢谢
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,