Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL数据库空问题_C#_Mysql - Fatal编程技术网

C# MySQL数据库空问题

C# MySQL数据库空问题,c#,mysql,C#,Mysql,我目前正在从日历向数据库输入数据,我意识到我输入的任何新条目都是空的。输入的所有数据都与列的数据类型相同,我不知道这是如何发生的。我输入的值都不是null或空的。我已经调试并观察了这些值以了解这一点 public static void insertEvent(string date, string title, string eventLocation, string detailsShort, string detailsLong, DateTime startTime, DateTime

我目前正在从日历向数据库输入数据,我意识到我输入的任何新条目都是空的。输入的所有数据都与列的数据类型相同,我不知道这是如何发生的。我输入的值都不是null或空的。我已经调试并观察了这些值以了解这一点

public static void insertEvent(string date, string title, string eventLocation, string detailsShort, string detailsLong, DateTime startTime, DateTime endTime, DateTime entered, string enteredBy)
        {
            try
            {

                string queryString = "INSERT INTO cor(cal_date,event_title,event_location,details_short,details_long,time_start,time_end,entered,entered_by)    VALUES (cal_date=cal_date, event_title=event_title, event_location=event_location, details_short=details_short, details_long=details_long,time_start=time_start, time_end=time_end, entered=entered, entered_by=entered_by)";
                OdbcConnection conn = new OdbcConnection(MyConString);
                conn.Open();
                OdbcCommand command = new OdbcCommand(queryString, conn);
                command.Parameters.Add("cal_date", OdbcType.DateTime, 30).Value = date;
                command.Parameters.Add("event_title", OdbcType.VarChar, 100).Value = title;
                command.Parameters.Add("event_location", OdbcType.VarChar, 100).Value = eventLocation;
                command.Parameters.Add("details_short", OdbcType.VarChar, 300).Value = detailsShort;
                command.Parameters.Add("details_long", OdbcType.VarChar, 300).Value = detailsLong;
                command.Parameters.Add("time_start", OdbcType.DateTime, 30).Value = startTime;
                command.Parameters.Add("time_end", OdbcType.DateTime, 30).Value = endTime;
                command.Parameters.Add("entered", OdbcType.DateTime, 30).Value = entered;
                command.Parameters.Add("entered_by", OdbcType.VarChar, 30).Value = enteredBy;
                command.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception)
            {

            }
        }

我不确定ODBC是否支持命名参数和常规SQL语句。到目前为止,我看到的ODBC语句使用“
”作为参数的占位符

某些DBMS允许应用程序指定数据库的参数 存储过程在过程调用中按名称而不是按位置。 此类参数称为命名参数。ODBC支持使用 命名参数。在ODBC中,命名参数仅在调用 存储过程和不能用于其他SQL语句

你为什么不用本地人?这将更快,并且可能支持更多特定于MySQL的功能


另外,我强烈建议不要使用空的
catch
块,除非您有充分的理由“使用”该异常。

我不确定ODBC是否支持命名参数和常规SQL语句。到目前为止,我看到的ODBC语句使用“
”作为参数的占位符

INSERT INTO cor(cal_date, ...) VALUES (cal_date=cal_date, ...);
某些DBMS允许应用程序指定数据库的参数 存储过程在过程调用中按名称而不是按位置。 此类参数称为命名参数。ODBC支持使用 命名参数。在ODBC中,命名参数仅在调用 存储过程和不能用于其他SQL语句

你为什么不用本地人?这将更快,并且可能支持更多特定于MySQL的功能

另外,我强烈建议不要使用空的
catch
块,除非您有充分的理由“使用”该异常

INSERT INTO cor(cal_date, ...) VALUES (cal_date=cal_date, ...);
问题在于表达式
cal_date=cal_date
(以及每个列的类似表达式)

插入新行时,任何列都没有值。因此,对该列的任何引用都是空的。表达式NULL=NULL也会产生NULL。因此,您不是在插入值,而是在为所有列插入空表达式

如果将表达式更改为
cal_date=@cal_date
,则不会解决问题。您正在将
cal\u date
的当前值(为空)与参数
@cal\u date
的值进行比较。类似于
NULL=“”的表达式。该示例显示使用@ZombieHunter的答案所建议的
占位符——而不是命名参数占位符。但是,在调用
Parameters.Add()
时,不知何故使用了前缀为
@
的命名参数。如图所示

nonqueryCommand.CommandText = "INSERT INTO MyTable VALUES (?, ?)";
nonqueryCommand.Parameters.Add("@MyName", OdbcType.VarChar, 30);
nonqueryCommand.Parameters.Add("@MyNumber", OdbcType.Int);
问题在于表达式
cal_date=cal_date
(以及每个列的类似表达式)

插入新行时,任何列都没有值。因此,对该列的任何引用都为NULL。表达式NULL=NULL也会生成NULL。因此,您没有插入值,而是为所有列插入NULL表达式

如果将表达式更改为
cal\u date=@cal\u date
,则无法解决问题。您正在将
cal\u date
的当前值(为NULL)与参数
@cal\u date
的值进行比较。类似于
NULL=”的表达式。该示例显示了使用@ZombieHunter的答案建议的
占位符——而不是命名参数占位符。但是,在调用
Parameters.Add()
时,人们会以某种方式使用前缀为
@
的命名参数。算了吧

nonqueryCommand.CommandText = "INSERT INTO MyTable VALUES (?, ?)";
nonqueryCommand.Parameters.Add("@MyName", OdbcType.VarChar, 30);
nonqueryCommand.Parameters.Add("@MyNumber", OdbcType.Int);

可能需要编辑出您的根密码LOL。对于严格的数据类型语言,我应该捕捉到+1。您是否尝试输出任何异常消息?查询中没有异常。数据库中有什么我可以看一下的吗?@MasterP可能想更改您的根密码;任何人都可以查看问题的编辑历史记录,但仍然可以看到。可能需要编辑您的根密码LOL。对于严格的数据类型语言,我应该捕捉到+1。您是否尝试输出任何异常消息?查询中没有异常。数据库中有什么我可以看一下的吗?@MasterP可能想更改您的根密码;任何人都可以查看问题的编辑历史记录,但仍然可以看到它。空捕获只是为了调试。我所有的查询都使用此连接器,而且我已经被踩了很长时间,我不想在不找出答案的情况下放弃。哈哈,好吧。因此,只需使用´?´作为参数占位符,并使用command.parameters.AddWithValue()以正确的顺序添加参数。空捕获仅用于调试。我所有的查询都使用此连接器,我已经被踩得太久了,我不想在不弄清楚答案的情况下放弃。哈哈,好吧。因此,只需使用´?´作为参数占位符,并使用command.parameters.AddWithValue()按正确顺序添加参数。添加@符号以区分变量仍然会导致空值。添加@符号以区分变量仍然会导致空值。