double var1 = Convert.ToDouble(Console.ReadLine());

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了double var1 = Convert.ToDouble(Console.ReadLine());相关的知识,希望对你有一定的参考价值。

Convert.ToDouble 这条语句是什么意思,convert 是做什么用的

Convert.ToDouble()是一个把变量转换为DOUBLE的方法。其中Convert是一个类名,ToDouble()是该类的方法吧 参考技术A 数据类型转换,有很多重载方法,如Convert.ToInt32(参数列表) 转为整形表示形式,msdn找找 是很基础的东西了,好好看看书吧

列不存在服务器错误 - 但 sql 服务器管理说它存在

【中文标题】列不存在服务器错误 - 但 sql 服务器管理说它存在【英文标题】:Column Doesn't Exist server error - but sql server management says it does 【发布时间】:2012-12-21 14:11:15 【问题描述】:

我正在尝试从 mysql 2008 数据库中导入一个字段。 我写了这个小代码(我以前用过几次) - 它一直给我这个服务器错误:

列'Previous Login'不属于表Table。

第 47 行:DateTime userEntry = Convert.ToDateTime(ds1.Tables[0].Rows[0]["Previous Login"]);

但它确实存在!当我在sql服务器管理中使用相同的查询时,它工作正常,所以我猜返回数据很好,知道我哪里出错了吗?

谢谢!

    
    SqlConnection con = new SqlConnection();
    con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;";
    con.Open();
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    // SQL Query that returns only the messages from the last 2 weeks starting with the most recent one.
    string sql = "Select * From Messages Where DATEDIFF(DAY,Date,GETDATE()) <= 14 ORDER BY Date Desc";
    SqlDataAdapter da = new SqlDataAdapter(sql, con);
    da.Fill(ds);
    dt = ds.Tables[0];
    showMsgs.DataSource = ds;
    showMsgs.DataBind();

    // new message notification
    string username = Convert.ToString(Session["username"]);
    username = username.Substring(username.IndexOf("\\") + 1);

    DataSet ds1 = new DataSet();
    DataTable dt1 = new DataTable();
    string sqluser = "Select * From [PhilipsMaterials].[dbo].[Employees] Where username='" + username + "'";
    SqlDataAdapter da1 = new SqlDataAdapter(sqluser, con);
    da.Fill(ds1);
    dt1 = ds1.Tables[0];
    DateTime userEntry = Convert.ToDateTime(ds1.Tables[0].Rows[0]["Previous Login"]);

    DateTime lastMsg = new DateTime();
    lastMsg = Convert.ToDateTime(ds.Tables[0].Rows[0]["Date"]);
    int compared = DateTime.Compare(userEntry, lastMsg);
    if (compared < 0)  notification.Visible = true; 
    con.Close();
 

【问题讨论】:

我的猜测是空格被删除或转换为不同的字符。在调试器中查看ds1.Tables[0].Columns,看看名字是什么。 我的经验一直是它不喜欢列名中的空格。 WHERE username='" + username + "'" 不要这样做!永远不能!为此使用SqlParamters。 en.wikipedia.org/wiki/SQL_injection 嗨丹尼尔,谢谢你的建议,我会看看但这个项目实际上不会在网络上使用,所以安全性是一个非常低的优先级(需要先实际工作) :// 【参考方案1】:

如果您的列名包含空格,您需要进行某种转义 - 尝试使用 [Previous Login] 作为列名,就像在 SQL 语句中一样。

并且 - 如问题评论中所述 - 看看SQL injection and how to avoid it。

【讨论】:

不,尝试使用括号甚至放弃并更改列名以使中间没有空格 - 仍然是同样的怪异错误。 好的,第二次尝试。你看过失败行的所有部分表达式吗? ds1.Tables[0]ds1.Tables[0].Rows[0]ds1.Tables[0].Rows[0]["Previous Login"] 是什么?它们是具有预期属性值的预期对象吗?我建议添加一个断点并使用监视窗口仔细检查对象。 您必须将表达式输入到监视窗口中-只需将表达式复制并粘贴到空行中或选择源代码中的表达式,右键单击并选择Add watch 手表窗口是灰色的,右键->添加手表也是灰色的。很想解决这个问题(调试器) 好吧,我让它工作了。 “不知道为什么不行,现在不知道为什么行”的经典案例之一。

以上是关于double var1 = Convert.ToDouble(Console.ReadLine());的主要内容,如果未能解决你的问题,请参考以下文章

列不存在服务器错误 - 但 sql 服务器管理说它存在

在 PHP 中,差异是啥: $var2=$var1 ; $var2=&$var1; [复制]

参数置换变量

JS,这是啥语法? “var3 =(var1 > var2)?var1:var2”[重复]

通过 var1 & var2 设置默认查询

Python笔记1