【问题标题】:ASP.net error INSERTING INTO SQL tableASP.net 错误 INSERTING INTO SQL 表
【发布时间】:2012-10-11 19:31:48
【问题描述】:

好吧,我已经到了不知道该怎么做的地步了,我之前发布过一个问题,结果是 -3 票以关闭该问题,并且担心再次发生这种情况让我一直在搜索谷歌直到被抢购...我尝试了很多代码,每次都遇到错误...

我今天创建了大约 6/7 次数据库并不断更改连接字符串...

我有一个包含 3 个表的数据库,1 个表称为 Company,现在我想要使用 2 个代表 CompName 和密码的文本框和一个代表业务类型的下拉列表。

我想用这些在表格中输入信息,有人可以帮我吗

这是我的代码:

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


public partial class CompanyLogin : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        string ConnectionString =     System.Configuration.ConfigurationManager.ConnectionStrings["MyConncetionString"].ConnectionString;

        string sql = "INSERT INTO company (CompName, BusinessType, Pword) VALUES('" + txtCompName.Text + "','" + DropDownList1.Text + "', '" + txtPassword + "')";
        using (SqlConnection sqlconn = new SqlConnection(ConnectionString))
        {
            sqlconn.Open();

            using (SqlCommand command = new SqlCommand(sql, sqlconn))
            {
                command.ExecuteNonQuery();
            }
        }
    }
}

错误:

System.NullReferenceException:对象引用未设置为对象的实例。

上线:

string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConncetionString"].ConnectionString;

web.config:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
     <add name="Varsity_College.tempsConnectionString" 
          connectionString="Data Source=JAUN-   PC\SQLEXPRESS;Initial Catalog=Varsity_College.temps;Integrated Security=True"
          providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
       ...... (irrelevant) ......
  </system.web>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

我的错误一直指向

第 17 行:
string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;*

【问题讨论】:

  • 使用参数化查询,而不是sql注入
  • 我们能看到 web.config 吗?看起来会出现错误,因为 ConnectionStrings["MyConncetionString"] 可能为空
  • 切入正题。如果您正在尝试修复错误,请将其放在顶部,跳过关于您上一篇文章的故事。您的异常表明您没有在 Web.config 的 connectionStrings 标记中定义 MyConnectionString。例如&lt;add name="MyConnectionString" connectionString="Data Source=SQLServerNameOrIP;Initial Catalog=DatabaseName;User ID=user;password=****;Network=IDontKnow" providerName="System.Data.SqlClient"/&gt;

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


【解决方案1】:

你有不匹配

MyConncetionString => 替换为MyConnectionString

你可以使用

   cmd.CommandText =  "insert into company(CompName, BusinessType, Pword) Values(@CompName,@BusinessType,@Pword);"

    cmd.Parameters.AddWithValue("@CompName", txtCompName.Text);    
    cmd.Parameters.AddWithValue("@BusinessType",DropDownList1.Text);    
    cmd.Parameters.AddWithValue("@Pword",txtPassword );    

    cmd.ExecuteNonQuery();

【讨论】:

  • @Night Programmer 您应该使用此建议进行防御,因为它正在实现参数化查询。除非您有充分的理由不这样做,否则这是唯一的方法。 codinghorror.com/blog/2005/04/…
【解决方案2】:

您正在尝试将整个密码文本框传递给它。

string sql = "INSERT INTO company (CompName, BusinessType, Pword) VALUES('" +    txtCompName.Text + "','" + DropDownList1.Text + "', '" + txtPassword + "')";

如果您使用密码字段,则应为 txtPassword.TexttxtPassword.Password

【讨论】:

    【解决方案3】:

    您尝试加载的连接字符串似乎不存在。

    MyConncetionString 这里有错字吗? (可能是MyConnectionString

    【讨论】:

      【解决方案4】:

      web.config 中的连接字符串被调用:

      <connectionStrings>
         <add name="Varsity_College.tempsConnectionString"  ..... />
      

      那么这行代码显然不会web.config中找到任何连接字符串:

      string ConnectionString = ConfigurationManager.ConnectionStrings["MyConncetionString"].ConnectionString;
      

      因此,这个表达式是NULL

      ConfigurationManager.ConnectionStrings["MyConncetionString"]
      

      并尝试访问该 NULL 表达式上的 .ConnectionString 属性会导致您看到的错误。

      这些名字需要排队!

      所以改用这个:

      string ConnectionString = ConfigurationManager.ConnectionStrings["Varsity_College.tempsConnectionString"].ConnectionString;
      

      并且那么你应该将web.config中定义的连接字符串放入你的C#代码中!

      另外:总是检查可能为空的内容是一个很好的原则 - 例如:

      string ConnectionString = string.Empty;
      
      // get the entry from the config file
      var entry = ConfigurationManager.ConnectionStrings["MyConncetionString"];
      
      // **CHECK** if entry is NOT NULL ......
      if (entry != null)
      {
         // only when sure that it's not NULL - **THEN** access the entry....
         ConnectionString = entry.ConnectionString;
      }
      

      【讨论】:

        【解决方案5】:

        正如我在评论中所说,您需要在 web.config 的配置标签中添加 ConnectionStrings 标签。

        <add name="MyConnectionString" connectionString="Data Source=SQLServerNameOrIP;Initial Catalog=DatabaseName;User ID=user;password=****;Network=IDontKnow" providerName="System.Data.SqlClient"/>
        

        一些可能有用(或没用)的参考资料: Sample asp.net connection string for web.config
        How to: Read Connection Strings from the Web.config File

        编辑:
        这似乎是一个更好的链接:Storing Database Connection String in Web.Config

        【讨论】:

          猜你喜欢
          • 2021-06-21
          • 1970-01-01
          • 2012-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-18
          • 2020-09-02
          • 1970-01-01
          相关资源
          最近更新 更多