c#-C#仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错

问题描述

C#仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错

这是一段仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错:
参数化查询 '(@FromUserId int,@ToUserId int,@Message nvarchar(1),@MessageType' 需要参数 '@MessageState',但未提供该参数。

错误详细信息为:

未处理 System.Data.SqlClient.SqlException
Message="参数化查询 '(@FromUserId int,@ToUserId int,@Message nvarchar(1),@MessageType' 需要参数 '@MessageState',但未提供该参数。"
Source=".Net SqlClient Data Provider"
ErrorCode=-2146232060
Class=16
LineNumber=0
Number=8178
Procedure=""
Server="(local)"
State=1
StackTrace:
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在 DAL.SqlHelper.ExecuteNonQuery(String connectionString, CommandType cmdType, String cmdText, SqlParameter[] commandParameters) 位置 D:BOOKC#_codeprojectQQ2010DALSQLHelper.cs:行号 54
在 DAL.MessagesDAL.Insert(MessagesInfo entity) 位置 D:BOOKC#_codeprojectQQ2010DALMessagesDAL.cs:行号 122
在 BLL.Messages.SendMessage(MessagesInfo entity, EnumMessageType messageType) 位置 D:BOOKC#_codeprojectQQ2010BLLMessages.cs:行号 84
在 MyQQ.frmChat.btnSend_Click(Object sender, EventArgs e) 位置 D:BOOKC#_codeprojectQQ2010MyQQfrmChat.cs:行号 77
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.Run(Form mainForm)
在 MyQQ.Program.Main() 位置 D:BOOKC#_codeprojectQQ2010MyQQProgram.cs:行号 17
在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:

具体代码如下:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

namespace DAL
{
public class SqlHelper
{

    public static readonly string ConnString = ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString;

    // Hashtable to store cached parameters
    private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

    public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {

        SqlCommand cmd = new SqlCommand();

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }
    }

    public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {

        SqlCommand cmd = new SqlCommand();

        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
    }

    public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {
        SqlCommand cmd = new SqlCommand();
        PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
    }

    public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {
        SqlCommand cmd = new SqlCommand();
        SqlConnection conn = new SqlConnection(connectionString);

         try
        {
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            cmd.Parameters.Clear();
            return rdr;
        }
        catch
        {
            conn.Close();
            throw;
        }
    }

    public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {
        SqlCommand cmd = new SqlCommand();

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;
        }
    }

    public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {

        SqlCommand cmd = new SqlCommand();

        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
        object val = cmd.ExecuteScalar();
        cmd.Parameters.Clear();
        return val;
    }

    public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
    {
        parmCache[cacheKey] = commandParameters;
    }

   public static SqlParameter[] GetCachedParameters(string cacheKey)
    {
        SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

        if (cachedParms == null)
            return null;

        SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

        for (int i = 0, j = cachedParms.Length; i < j; i++)
            clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

        return clonedParms;
    }

     private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
    {
        if (conn.State != ConnectionState.Open)
            conn.Open();

        cmd.Connection = conn;
        cmd.CommandText = cmdText;

        if (trans != null)
            cmd.Transaction = trans;

        cmd.CommandType = cmdType;

        if (cmdParms != null)
        {
            foreach (SqlParameter parm in cmdParms)
                cmd.Parameters.Add(parm);
        }
    }
}

}

请教高手如何解决?谢谢。

解决方案

跪求高手解答~~~!!!!

解决方案二:

根据(参数化查询 '(@FromUserId int,@ToUserId int,@Message nvarchar(1),@MessageType' 需要参数 '@MessageState',但未提供该参数。)
说明你在查询时 '@MessageState'参数找不到,调试一下,看看你具体是哪段代码是使用这些参数的

解决方案三:

少参数;仔细看一下,或者跟踪一下存储过程;

时间: 2024-12-21 21:42:43

c#-C#仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错的相关文章

仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错:

问题描述 参数化查询'(@FromUserIdint,@ToUserIdint,@Messagenvarchar(1),@MessageType'需要参数'@MessageState',但未提供该参数.错误详细信息为:未处理System.Data.SqlClient.SqlExceptionMessage="参数化查询'(@FromUserIdint,@ToUserIdint,@Messagenvarchar(1),@MessageType'需要参数'@MessageState',但未提供该参数

javascript-js代码中加上两个alert就好用,去掉就报错

问题描述 js代码中加上两个alert就好用,去掉就报错 var mvc = new suspicionmanagement.views.MainViewController(); var view = mvc.getView() var v_dataGrid = view.getDataGrid(); v_dataGrid.load(); alert(v_dataGrid); var datas = v_dataGrid.items.length;//得到总记录数 alert(datas);

代码经过精简后的仿QQ折叠菜单代码_导航菜单

我的好友 张三 王五 业务联系 李经理 家人 爸爸 妈妈 同事 小赵 讨厌的人 梅朝风

急,急,手机经常收到程序报错代码的彩信

问题描述 [SatSep1021:27:34GMT+08:002011]HostManagerURL:http://sfms.m.snapfish.com/mercury/hessian[SatSep1021:27:34GMT+08:002011]HostManagersecureURL:https://sfms.m.snapfish.com/mercury/hessian[SatSep1021:27:34GMT+08:002011]TODO:HostManagersecureURLsettos

JS实现超简单的仿QQ折叠菜单效果_javascript技巧

本文实例讲述了JS实现超简单的仿QQ折叠菜单效果.分享给大家供大家参考.具体如下: 这是一款经过精简后的仿QQ折叠菜单代码,以前发过的,不过这个是经过几轮代码精简后的一个版本,而且在各浏览器下的表现也很不错,兼容性没出问题. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-simple-f-qq-zd-style-menu-codes/ 具体代码如下: <!DOCTYPE html> <html xmlns="http:/

java代码编程报错,求原因。

问题描述 java代码编程报错,求原因. 把第5行代码改为Outer2 a = new Outer2() ;程序报错:Exception in thread "main" java.lang.StackOverflowError:在本类中要实例化该对象,必须使用this替代吗? package comm.test; class Outer2 { private String title="HELLo world"; Outer2 a = this; //第5行 pu

客户端兼容战一触即发:扣扣保镖遭新版QQ报错

每经记者 庄春晖 发自上海 一旦QQ与360开打兼容大战,最终胜利者是谁? 10月29日,360推出 "扣扣保镖",截至11月1日,3天内公司官方统计的下载量已逾千万.同时,网络上出现 "QQ升级强制要求卸载 '保镖'"."安装'保镖'QQ报错"等消息.对此腾讯方面人士表示,"关于QQ登录异常问题,提请您注意360推出这款外挂前,QQ并没有出现这个情况."并再次申明"使用非法外挂会威胁用户账号及虚拟财产安全,请广大用

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

 SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr 源码:http://pan.baidu.com/s/1dETGYGT 应用情景之一:     没太多连续的时间来研究SignalR,所以我把这篇文章分了三个阶段: 第一

Android仿QQ、微信聊天界面长按提示框效果_Android

先来看看效果图 如何使用 示例代码 PromptViewHelper pvHelper = new PromptViewHelper(mActivity); pvHelper.setPromptViewManager(new ChatPromptViewManager(mActivity)); pvHelper.addPrompt(holder.itemView.findViewById(R.id.textview_content)); 使用起来还是很简单的 首先new一个PromptViewH