我创建了一个类似于这个简化示例的存储过程:
CREATE PROCEDURE dbo.sp_MyStoredProcedure
@Var1 INT OUTPUT,
@Var2 DECIMAL(10,2) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
@Var1 = COUNT(*),
@Var2 = SUM(TranAmount)
FROM
MyTable
SELECT * FROM MyTable
END
Run Code Online (Sandbox Code Playgroud)
当我在调用对象的ExecuteReader()方法后尝试从输出变量中读取值时SqlCommand,值为null.
string MyConnString = string.Empty;
SqlConnection MyConn = new SqlConnection(MyConnString);
SqlCommand MyCmd = new SqlCommand("sp_MyStoredProcedure", MyConn);
MyCmd.CommandType = CommandType.StoredProcedure;
MyCmd.Parameters.Add(new SqlParameter("@Var1", SqlDbType.Int));
MyCmd.Parameters.Add(new SqlParameter("@Var2", SqlDbType.Decimal);
MyCmd.Parameters[0].Direction = ParameterDirection.Output;
MyCmd.Parameters[1].Direction = ParameterDirection.Output;
SqlDataReader dr = MyCmd.ExecuteReader(CommandBehavior.CloseConnection);
int Var1 = Convert.ToInt32(MyCmd.Parameters[0].Value);
decimal Var1 = Convert.ToDecimal(MyCmd.Parameters[1].Value);
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
c# stored-procedures sql-server-2005 sqldatareader output-parameter
我再次检查DataReader对象是否有数据有问题?
Dim cmd as SqlCommand
Dim drd as SqlDataReader
cmd = New SqlCommand ("SELECT * FROM Stock", conx)
drd = cmd.ExecuteReader()
''HERE I WOULD LIKE TO CHECK WHETHER drd has Data or not
While (drd.Read())
{
txtName.Text = drd.Item("StockName")
}
Run Code Online (Sandbox Code Playgroud)
我该怎么检查?请帮我!谢谢大家!
当我写这样的东西时:
using (var connection = new SqlConnection("ConnectionString"))
{
using(var cmd= new SqlCommand("Command"))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
ReSharper显示警告reader.Read(),并告诉读者可以null.
但在什么情况下它可以为空?据我所知,如果命令返回什么,读者不是空的,它只有什么都没有.
我试图使用a SqlDataReader来运行查询,然后在消息框中显示结果,但我一直收到错误
没有数据时无效尝试读取.
这是我的代码.
public void button1_Click(object sender, EventArgs e)
{
string results = "";
using (SqlConnection cs = new SqlConnection(@"Server=100-nurex-x-001.acds.net;Database=Report;User Id=reports;Password=mypassword"))
{
cs.Open();
string query = "select stationipaddress from station where stationname = @name";
using (SqlCommand cmd = new SqlCommand(query, cs))
{
// Add the parameter and set its value --
cmd.Parameters.AddWithValue("@name", textBox1.Text);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
label3.Text = dr.GetSqlValue(0).ToString();
results = dr.GetValue(0).ToString();
//MessageBox.Show(dr.GetValue(0).ToString());
//MessageBox.Show(results);
}
MessageBox.Show(results);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个公共类,并使用以下参数编写了一个公共构造函数:
public Patient(SqlDataReader reader, string p) {
if (p == "L") {
Name = reader[0].ToString();
}
else { }
}
Run Code Online (Sandbox Code Playgroud)
然后我使用了这个构造函数
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Patient myP(reader, "L");
}
Run Code Online (Sandbox Code Playgroud)
然后在调试期间,我收到错误:错误49预期; 或=(不能在声明中指定构造函数参数)
问题在哪里,我该如何解决?
我有一个表,其中有14行我想要返回,并声明每个单元格作为变量.这是我尝试过的:
using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["2012SSMS"].ConnectionString))
{
SqlCommand cmd1 = new SqlCommand(@"SELECT [Question], [Answer]
from [MyTable]", conn1);
conn1.Open();
using (SqlDataReader reader1 = cmd1.ExecuteReader())
{
while (reader1.HasRows)
{
reader1.GetName(0);
reader1.GetName(1);
while(reader1.Read())
{
string Question(1) = reader1.GetString(0); //errors here
string Answer(1) = reader1.GetString(1); //and here
}
reader1.NextResult();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望将声明的变量返回为Question1- Question14和Answer1- Answer14.我该怎么做呢?
我有这个代码适用于没有NULL值的数据库
public T GetField<T>(SqlDataReader dr, string fieldName)
{
return (T)dr.GetValue(dr.GetOrdinal(fieldName));
}
Run Code Online (Sandbox Code Playgroud)
然后我想控制DBNull值,因为它们已经存在于某些表中,我升级了这个函数:
public T GetField<T>(SqlDataReader dr, string fieldName) where T : new()
{
var value = dr.GetValue(dr.GetOrdinal(fieldName));
return value is DBNull ? new T() : (T)value;
}
Run Code Online (Sandbox Code Playgroud)
但是现在,我不能要求GetField<string>因为string没有带0参数的构造函数.
我试图创建另一个像Abstract一样的函数,没有任何限制,只有像这样的字符串类型
public string GetField<string>(SqlDataReader dr, string fieldName)
{
var value = dr.GetValue(dr.GetOrdinal(fieldName));
return value is DBNull ? "" : value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但答案是它们的定义不明确,因为T也包括字符串,即使应用了限制.
我可以为每种数据类型创建独立的函数,但我更喜欢抽象的解决方案,因为它更清晰.
我错过了什么?
谢谢!
我想在C#中运行一个SQL语句
这是代码:
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection(
@"Data Source=loninasd023.xx.xx.com;Initial
Catalog=DB.Manager.Data;Integrated Security=SSPI;");
if (impersonateValidUser("svc_mgr", "USERNAME", "PASSWORD"))
{
conn.Open();
SqlCommand cmd = new SqlCommand(
"SELECT [data_check_info] FROM [DB.Manager.Data].[dbo].[server_package_status]",
conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader);
}
reader.Close();
conn.Close();
}
else
{
Console.WriteLine("The impersonation failed.");
Environment.Exit(100);
}
}
Run Code Online (Sandbox Code Playgroud)
该程序打印这个:
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我试图让我的SQL查询读取,但它并没有真正起作用.它一直在工作,直到它来到查询部分,然后在线:
rst = query.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
它收到一个错误:
Connection属性尚未初始化.
有谁知道如何处理这个?
Chart chart = new Chart();
StringBuilder xmlStr = new StringBuilder();
StringBuilder strCategories = new StringBuilder();
StringBuilder strProcesses = new StringBuilder();
StringBuilder strTasks = new StringBuilder();
xmlStr.Append("<chart logoURL='../../Images/Piktogramme/" + chart.Image + "' caption='" + chart.Caption + "' theme='flat'" + " dateformat='dd/mm/yyyy' showTaskLabels='1'>"); // attributes will go here
// Category for each month
for (int i = -12; i < 6; i++)
{
DateTime today = DateTime.Now;
today = today.AddMonths(i);
strCategories.Append("<category start='1/" + today.Month + …Run Code Online (Sandbox Code Playgroud) 我有3个表:users,feed(id,body,title,link)和userstofeed(id,userid,feedid,isread)而我试图读取userstofeed表布尔值,它带来的IndexOutOfRangeException.请告诉我,我做错了什么
while (reader.Read())
{
rssFeed.Title = reader["title"].ToString();
rssFeed.Body = reader["body"].ToString();
rssFeed.Link = reader["link"].ToString();
rssFeed.IsRead = (bool) reader["isread"]; //IndexOutOfRangeException here
yield return rssFeed;
}
Run Code Online (Sandbox Code Playgroud)
这里是sql store程序:
create proc spGetItemsByUser
@userName nvarchar(50)
as
begin
declare @userId int
declare @feedId table (id int)
select @userId = id
from Users
where name = @userName
insert into @feedid (id)
select feedid, isread
from userstofeed
where userid = @userId
select * from feed where id in (select id …Run Code Online (Sandbox Code Playgroud) sqldatareader ×10
c# ×9
sql-server ×4
sql ×3
.net ×1
c#-4.0 ×1
constructor ×1
fusioncharts ×1
generics ×1
resharper ×1
vb.net ×1