C# 调用一个方法,内有一个参数,执行SQL查询语句,并将结果返回,该方法如何写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 调用一个方法,内有一个参数,执行SQL查询语句,并将结果返回,该方法如何写?相关的知识,希望对你有一定的参考价值。
我的结果只有一个数字,我想把这个结果放入一个textbox里面,求教
该参数是要执行的SQL语句
textbox1.text=ds.Table[0].Rows[0][0].ToString(); //如果你要的数据不在第一行第一列,把Rows[0][0]中的两个0换成你要的数据所在的行、列编号就可以啦。
当然你如果你要的数据在第一行第一列,你可以用方法:SqlCommand.ExecuteScalar() 方法(执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。)
上面两种都可以,第一种更灵活但不直接 参考技术A 你先拖一个 Textbox 文本框
TextBox1.Text =
using (SqlCommand cmd = new SqlCommand(“select ID from Table where 你的条件”, "你的数据库连接字符串"))
try
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
TextBox1.Text = obj.ToString(); //数据库结果值给文本框
catch (System.Data.SqlClient.SqlException e)
throw e;
参考技术B ///没有进行错误捕获。
public int Test(string sql)
SqlConnection con = new SqlConnection("数据库连接字符串");
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
object o = cmd.ExecuteScalar();//好象是这么拼的,就是查询第一行第一列
//的方法。
con.Close();
if (o == null)
return -1;
else
return (int)o;//保证o为int型。可以先用int.TryParse转一下。
本回答被提问者采纳 参考技术C public int TextBox( string tiaojian)
DataTable dt= (查询类)"select * from table where 列名=tiaojian";
int a = int.Parse(dt.Rows[0][0].ToString());
return a;
this.textbox.text=textbox(传入的参数);
从另一个查询调用参数查询 - Access SQL
【中文标题】从另一个查询调用参数查询 - Access SQL【英文标题】:Call parameter query from another query - Access SQL 【发布时间】:2017-10-10 12:43:17 【问题描述】:我在 MS Access 中有一个表格,其中包含员工详细信息 (tblStaff):
| Employee ID | Employee Name | Manager ID | Manager Name |
--------------------------------------------------------------------
| 205147 | Bobby Fischer | 201154 | Alan Turing |
| 205442 | Carl Sagan | 204468 | Nikola Tesla |
我每周用新数据刷新此表,如果任何员工更换了经理,那么他们将与该记录的有效日期一起存档在另一个表 (tblArchiveStaff) 中。
| Employee ID | Employee Name | Manager ID| Manager Name | DateFrom| DateTo|
----------------------------------------------------------------------------
| 205442 | Carl Sagan | 235663 | Marie Curie |03/01/16|01/06/17|
我编写了一个参数查询 (qryDatedStaffList),它将根据在给定日期 (SelectedDate
) 中有效的记录从这些表中的任何一个表中选择记录
SELECT
tblUnion.[Employee ID],
tblUnion.[Manager Name],
tblUnion.DateFrom,
tblUnion.DateTo
FROM
(SELECT
ts.[Employee ID],
ts.[Manager Name],
DateAdd("d", 1, Nz(ta2.MaxDateTo, #01/02/16#)) AS DateFrom,
Date() AS DateTo
FROM
tblStaff ts
LEFT JOIN
(SELECT
[Employee ID],
max(DateTo) AS MaxDateTo
FROM
tblArchiveStaff
GROUP BY
[Employee Number]) ta2
ON ts.[Employee Number] = ta2.[Employee Number]
UNION ALL
SELECT
ta.[Employee ID],
ta.[Manager Name],
ta.DateFrom,
ta.DateTo
FROM
tblArchiveStaff ta) AS tblUnion
WHERE
SelectedDate Between [DateFrom] And [DateTo];
上述查询工作正常。
我现在正在尝试编写另一个查询,该查询将返回其经理保持不变但他们的二线经理(经理的经理)已更改的所有员工。在这一点上,我被卡住了。
我猜我需要在上面的 qryDatedStaffList 中输入 tblChanges 中每条记录的 DateTo 值作为SelectedDate
参数,但不知道这是否可能?
在最坏的情况下,我确信我可以使用 VBA 实现这一点,但出于性能原因,我试图坚持使用纯 SQL 解决方案。有人能指出我正确的方向吗?
(ps 我不一定要求任何人为我编写查询,我只是想知道是否有办法将一个查询中的列中的值作为另一个查询中的参数传递)
【问题讨论】:
当我使用历史数据创建任何类型的差异报告时,我经常使用一个带有一行的临时表,其中包含从到到的日期,而不是将它们作为参数传递。它有助于简化甚至非常复杂的查询。你可以试试。 嗨,谢尔盖。感谢您的回复。我不确定我是否完全理解你的意思。您的意思是针对特定日期运行查询,然后将结果插入到临时表中以使用。然后在每个日期重复这个过程? 您可以使用TempVars
代替参数。您可以通过 VBA 或宏来设置它们,并在查询中引用它们。
有趣。我以前没有遇到过TempVars
。只是查看它们,它们似乎就像一个全局变量?不完全确定我将如何应用它来解决我的问题?
TempVars
是可以在查询、宏和 VBA 中使用的全局变量。语法是TempVars!MyVar
,例如在 VBA TempVars!MyVar = 10
中,然后在您的查询中 WHERE ID = TempVars!MyVar
【参考方案1】:
我确实设法找到了一个纯 SQL 解决方案。我首先删除了原始帖子中 qryDatedStaffList 上的日期条件。这给了我一份结构变化的清单(而不仅仅是那些在特定日期有效的变化)。
然后我可以简单地编写另一个引用它的查询,它将员工列表加入到自身中,并显示经理更改区域但向他们报告的员工尚未更新的任何记录:
SELECT *
FROM
qryDatedStaffList AS a
INNER JOIN
qryDatedStaffList AS b
ON
a.[Employee ID] = b.[Manager ID]
WHERE
a.dateto between b.datefrom and b.dateto-1
【讨论】:
以上是关于C# 调用一个方法,内有一个参数,执行SQL查询语句,并将结果返回,该方法如何写?的主要内容,如果未能解决你的问题,请参考以下文章
在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题