【问题标题】:Unable to insert data into MySQL table via ASP.NET Web Application无法通过 ASP.NET Web 应用程序将数据插入 MySQL 表
【发布时间】:2018-07-30 14:17:14
【问题描述】:

我已在本地计算机上安装 MySQL,并尝试在 Visual Studio 2017 上从我的 ASP.NET Web 应用程序将数据插入到创建的 MySQL 表中。我已成功设置 MySQL 连接并创建表称为“事件”。

最初,使用下面的代码,我没有任何语法或系统错误,但每当我尝试在单击时从我的 Web 表单插入数据时,都没有数据插入到 MySQL 表中。如果我的代码或任何其他文件配置有任何问题,有什么建议吗?

稍后,在我尝试安装 Connector for .NET 后,我仍然无法将数据插入 MySql,并且在命名空间 MySqlConnection 中出现以下错误,指出“the-type-mysqlconnection-exists-in-both-mysql-data-issue ' 如下所示

有什么建议可以更正以将数据插入我的表中?是在我的插入代码中还是问题出在其他地方?以下是我的代码:

AddEvent.aspx.cs:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;

namespace Prototype3
{
   public partial class AddEvent : System.Web.UI.Page
   {
     //convert event date input into DateTime format on back-end of page 
     string dateStr = dateinput1.Value;
     DateTime date;

     //Saving data on added event into MySQL database
     string constring = "server=localhost;user id=***********; 
     password=***********!; 
     persistsecurityinfo=True;database=homesecretary";

      //Connection to database below-check!!
      string Query = "INSERT into events (eventTitle) VALUES 
      ('"+tb_eventTitle.Text+"')"; //Parse date input from jQuery 
      datepicker 
      MySqlConnection connDataBase = new MySqlConnection(constring); 

      MySqlCommand cmdDataBase = new MySqlCommand(Query, connDataBase);
      MySqlDataReader myReader;

      try
         {
             connDataBase.Open();
             myReader = cmdDataBase.ExecuteReader();
             connDataBase.Close();
         }

Web.config:

  <configuration>
   <connectionStrings>
   <add name="homesecretaryConnectionString" 
   connectionString="server=localhost;user 
   id=********; password=********; persistsecurityinfo=True; 
   database=homesecretary" providerName="MySql.Data.MySqlClient" />
   </connectionStrings>
   .....
  </configuration>

【问题讨论】:

  • 请注意,visual-studio 标记描述说 “不要在有关代码的问题上使用此标记,而这些代码恰好是用 Visual Studio 编写的。”edit您的删除它的问题。
  • 不相关的提示:SqlConnection 和 SqlCommand 都是 IDisposable,所以每个都应该在 using 块中。然后你不需要显式地关闭它,因为退出块调用 Dispose 调用 Close。避免字符串连接构造查询,否则代码容易受到 SQL 注入攻击:使用 SQL 参数。
  • 尽管您已将连接字符串放入配置中,但代码并未使用它,它只是复制了它 - 添加对 System.Configuration 的引用并使用 ConfigurationManager.ConnectionStrings

标签: c# mysql asp.net visual-studio


【解决方案1】:

您在这里犯了一个非常基本/根本性的错误。

MySqlDataReader 的目的是在我们选择数据时使用。您需要插入数据而不是查询,因此它应该调用ExecuteNonQuery() 方法:

// for inserts/updates queries
cmdDataBase.ExecuteNonQuery()

有关如何在 ADO.NET 中插入数据的示例,请参阅以下文档:

MSDN - Insert New Records in to Database

注意:请不要在创建查询时进行字符串连接,因为这不是一个好的做法,您应该使用参数化查询。 See an example here

【讨论】:

    【解决方案2】:

    update/insert你可能需要使用ExecuteNonQuery的数据和填写DataSet你可以使用MySqlDataAdapter如下:

    private static string _DBConnectionString = string.Empty;    
    public static int SetData(string sqlQuery)
    {
        int iReturn = -1;
        try
        {
            MySqlCommand cmd = new MySqlCommand(sqlQuery);
            using (MySqlConnection conn = new MySqlConnection(DBConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
    
                cmd.Connection = conn;
                iReturn = cmd.ExecuteNonQuery();
    
                if (conn.State == ConnectionState.Open)
                    conn.Close();
            }
        }
        catch (Exception E)
        {
            iReturn = -1;
    
        }
        return iReturn;
    }
    
    public static object GetData(string sqlQuery)
    {
        DataSet dtSet = new DataSet();
        try
        {
            MySqlCommand cmd = new MySqlCommand(sqlQuery);
            MySqlDataAdapter adpt = new MySqlDataAdapter();
    
            using (MySqlConnection conn = new MySqlConnection(DBConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
    
                cmd.CommandTimeout = 0;
                adpt.SelectCommand = cmd;
    
                cmd.Connection = conn;
                adpt.Fill(dtSet);
    
    
                if (conn.State == ConnectionState.Open)
                    conn.Close();
            }
        }
        catch (Exception E)
        {   
    
        }
        return dtSet;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多