gpt4 book ai didi

c# - 使用参数和只放置一个变量然后转换它有什么区别

转载 作者:行者123 更新时间:2023-11-30 15:32:59 26 4
gpt4 key购买 nike

所以我正在使用 odbc 从数据库中检索数据。导致问题的我的字段之一是 AutoNumber。在我使用“convert.toint64(empid)”' 的查询中,出现数据类型不匹配的错误。但是当我使用参数时,它工作得很好。谁能告诉我有什么区别。据我所知,AutoNumber 是一个长整数,long int 是 64,对吧?

这是我的两个问题:

        string cmdText = "SELECT p.projID, p.projName, a.wageperday " +
"FROM ((projects p INNER JOIN assigns a ON p.projID = a.projname) " +
"INNER JOIN empos e ON a.employeeID= e.ID) " +
"WHERE a.employeeID = ?";
OdbcCommand assignslist = new OdbcCommand(cmdText, _connection);
assignslist.Parameters.AddWithValue("@empID", empid);
OdbcDataReader readassigns = assignslist.ExecuteReader();
GridView1.DataSource = readassigns;
GridView1.DataBind();

(这个很好用)

        string cmdText = "SELECT p.projID, p.projName, a.wageperday " +
"FROM ((projects p INNER JOIN assigns a ON p.projID = a.projname) " +
"INNER JOIN empos e ON a.employeeID= e.ID) " +
"WHERE a.employeeID = '" + convert.toint64( empid ) + "';
OdbcCommand assignslist = new OdbcCommand(cmdText, _connection);
OdbcDataReader readassigns = assignslist.ExecuteReader();
GridView1.DataSource = readassigns;
GridView1.DataBind();

对于这个,即使我删除了转换,我也会收到错误消息。

还有一个问题,我对 INNER JOIN 不是很理解,上面的代码来自一位帮助过我的用户。我不明白他为什么要使用“FROM ((projects p INNER JOIN assigns a ON p.projID = a.projname)” + "INNER JOIN empos e ON a.employeeID= e.ID)"

两个括号——我的意思是括号内有一个括号。如果我想加入第 4 或第 5 table ,我是否必须将它放在除主支架之外的支架内?一个例子将不胜感激!

最佳答案

如果 a.employeeID 是一个数字,那么您的问题是引号和数字与字符串的连接。

"WHERE a.employeeID = " + convert.toint64(empid).ToString()

但这没有意义,因为你有一个字符串要构建,所以你可以简单地写

"WHERE a.employeeID = " + empid.ToString();

但是始终使用参数化查询。这才是正确的做法。

参数化查询允许框架代码以正确的格式传递参数,您不必担心引用值、日期格式和小数点分隔符。 (最后但同样重要的是,你避免了任何可能的 SQL 注入(inject))

对于问题的第二部分,JOIN用于将两个表中的数据放在一起,当您有多个 JOIN 时,括号有助于理解表中的分组是如何执行的。首先是来自 projects 的数据和 assigns按照 INNER JOIN 的规则分组在一起,然后将结果数据集与来自 employee 的数据连接起来表遵循第二次连接的规则。

关于c# - 使用参数和只放置一个变量然后转换它有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com