【问题标题】:Remove last two characters of value stored in string veriable删除存储在字符串变量中的值的最后两个字符
【发布时间】:2013-11-15 14:28:44
【问题描述】:

我正在 VS2010 c# 中开发一个应用程序来从 SQLServer 获取单行数据并将其插入 MySQL。

我已获取数据并存储在特定的字符串变量中。获取代码如下。

SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            s_name = (dr["s_name"].ToString());
            s_city = (dr["s_city"].ToString());
            s_address = (dr["s_address"].ToString());
            s_added_date = (dr["s_added_date"].ToString());
            s_added_by = (dr["s_added_by"].ToString());
        }

所有以字符串格式存储值。问题在于 s_added_date 这个变量包含日期时间值,即像 11/15/2013 12:01:00 AM 无法插入 MySQL 我认为是因为 AM。

我的插入代码如下。

            mcmd.CommandText = "INSERT INTO tblaqi(s_name,s_city,s_address,s_added_date,s_added_by) VALUES(@s_name,@s_city,@s_address,s_added_date,s_added_by)";
        mcmd.Parameters.AddWithValue("@s_name", s_name);
        mcmd.Parameters.AddWithValue("@s_city", s_city);
        mcmd.Parameters.AddWithValue("@s_address", s_address);
        mcmd.Parameters.AddWithValue("@s_added_by", s_added_by);
        mcmd.Parameters.AddWithValue("@s_added_date", s_added_date);

        int count = mcmd.ExecuteNonQuery();
        if (count != 0)
        {
            MessageBox.Show("Success..!!");
        }
        else
            MessageBox.Show("Need to work");

我的问题是这会有什么问题。

提前致谢。

【问题讨论】:

  • 为什么datetime 列包含AM?不要存储字符串而是正确的类型。

标签: c# mysql sql sql-server-2008 c#-4.0


【解决方案1】:

解决方案 1: 您的查询无效:您在 insert into 语句中缺少 @ 参数符号,如下所示

mcmd.CommandText = "INSERT INTO tblaqi(s_name,s_city,s_address,s_added_date,s_added_by) VALUES(@s_name,@s_city,@s_address,s_added_date,s_added_by)";
                                                                                                                          ^^^          ^^^

应该是这样的:

 mcmd.CommandText = "INSERT INTO tblaqi(s_name,s_city,s_address,s_added_date,s_added_by) VALUES(@s_name,@s_city,@s_address,@s_added_date,@s_added_by)";

解决方案 2:

s_added_date=s_added_date.Substring(0, s_added_date.Length - 3);//stores only 11/15/2013 12:01:00

【讨论】:

  • 你是对的,但看起来这不是 OP 的根本问题。
【解决方案2】:

你应该首先存储正确的类型,所以datetime而不是varchar

否则,您总是必须将其解析为 DateTime,否则可能会出现格式无效、本地化问题和性能不佳的风险。你可以使用DateTime.ParseExact:

string s_added_date = dr.GetString("s_added_date");
DateTime dtAdded = DateTime.ParseExact(s_added_date , "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
mcmd.Parameters.AddWithValue("@s_added_date", dtAdded);

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 2016-01-21
    • 2015-08-22
    • 2012-03-01
    • 2019-10-25
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多