【问题标题】:Exception thrown: 'System.ArgumentException' in System.Data.dll抛出异常:System.Data.dll 中的“System.ArgumentException”
【发布时间】:2021-04-20 17:38:20
【问题描述】:

我尝试了很多方法来解决问题,但没有找到正确的答案。当点击保存按钮时,会出现以下消息;

抛出异常:System.Data.dll 中的“System.ArgumentException”

并突出显示该行

public static SqlConnection con = new SqlConnection(s);

这里是详细代码。

Connection.cs 文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
using System.Data;

namespace IMS
{
    class Connection
    {
        private static string s = File.ReadAllText(Application.StartupPath + "\\Connect.txt");
        public static SqlConnection con = new SqlConnection(s);
    }
}

我在哪里编写插入代码以在表中插入数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
using System.Data;

namespace IMS
{
    class insertion
    {
        public void InsertUser(string name, string username, string password, string email, Int16 status)
        {
            try
            {
                SqlCommand cmd = new SqlCommand("sy_InsertUser", Connection.con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@name", name);
                cmd.Parameters.AddWithValue("@username", username);
                cmd.Parameters.AddWithValue("@password", password);
                cmd.Parameters.AddWithValue("@email", email);
                cmd.Parameters.AddWithValue("@status", status);
                Connection.con.Open();
                if (cmd.ExecuteNonQuery()>= 1)
                {
                    mainclass.ShowSucsMsg("User Added Successfuly");
                }
                Connection.con.Close();
            }
            catch (Exception ex)
            {
                Dashborad.ShowExpMsg(ex);
            }
        }
    }
}

数据保存按钮代码

 public override void savebtn_Click(object sender, EventArgs e)
        {
            insertion obj = new insertion();
            obj.InsertUser(usnametxt.Text, usUsernametxt.Text, usPasswordtxt.Text, usEmailtxt.Text, Status);
        }

App.Cofig

 <appSettings>
    <add key="" value="\\Connect.txt" />
  </appSettings>

【问题讨论】:

  • 您忘记发布连接字符串本身。该错误抱怨连接字符串。所有其他代码都不是真正相关的
  • 出现异常的那一行的 s 值是多少?
  • 顺便说一句,使用静态连接是一个非常的坏主意。连接是短暂的,在使用之前创建并在之后立即处理。全局连接会累积锁并导致严重的并发问题,即使有十几个用户也是如此。在事务之外获取的锁会一直保持到连接关闭。这意味着使用con 的UPDATE 操作将导致独占锁一直保持到应用程序终止。以这种方式非常很容易陷入死锁,只需在另一台机器上打开另一个实例即可
  • 如果 InsertUser 方法在您打开连接后抛出异常,您忘记关闭。当您尝试再次重新打开连接时,这会导致另一个错误。搜索using语句的使用方法
  • @Russ 这是 App.Config 中的连接字符串 &lt;connectionStrings&gt; &lt;add name="IMS" connectionString="Data Source=NAINASEMI-PC\SA; Initial Catalog=IMS; User ID=sa; Password=63377; Integrated Security=True;MultipleActiveResultSets=True"/&gt; &lt;/connectionStrings&gt;

标签: c#


【解决方案1】:

您不应将连接保持为静态。你应该这样使用连接:

using (var connection = new SqlConnection(
               connectionString))
    {
                var command = new SqlCommand("sy_InsertUser", connection);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@name", name);
                command.Parameters.AddWithValue("@username", username);
                command.Parameters.AddWithValue("@password", password);
                command.Parameters.AddWithValue("@email", email);
                command.Parameters.AddWithValue("@status", status);
                command.connection.Open();
                if (command.ExecuteNonQuery()>= 1)
                {
                    mainclass.ShowSucsMsg("User Added Successfuly");
                }
       
    }

【讨论】:

  • 几乎工作,现在点击保存按钮出现新消息“与服务器成功建立连接,但在登录过程中出现错误(提供者:共享内存提供者,错误:0 - 没有进程在管道的另一端。)”
  • 能否请您显示您使用的连接字符串?
  • &lt;connectionStrings&gt; &lt;add name="IMS" connectionString="Data Source=NAINASEMI-PC\SA; Initial Catalog=IMS; User ID=sa; Password=63377; Integrated Security=True;MultipleActiveResultSets=True"/&gt; &lt;/connectionStrings&gt;
  • @AmnaMudassar 尝试使用 Integrated Security=False;
  • 如果它仍然不起作用,请尝试添加到字符串“Connect Timeout=15; Encrypt=False; Packet Size=4096 的末尾
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
相关资源
最近更新 更多