PDA

View Full Version : سوال: ارورSubquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <



mahan206
چهارشنبه 27 اسفند 1393, 09:50 صبح
سلام من یه سایت دارم کلا خوب کار میکرد بعد یوهو با این مشکل مواجه شدم بعد از یک ماه روی هاست بودن.
مشکل تو این قسمت امار سایته که این کدشه
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for StateSite
/// </summary>
public class StateSite
{
private static bool CheckDate()
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
string query = "Select * From StateSite Where Date='" + DateTime.Now.ToShortDateString() + "'";
SqlCommand com = new SqlCommand(query, connect);
connect.Open();
SqlDataReader dr = com.ExecuteReader();
if (dr.Read())
{
return true;
}
else
{
return false;
}
connect.Close();
}
public static void SeeSite()
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
string query = "";
SqlCommand com = new SqlCommand();
com.Connection = connect;
if (CheckDate())
{

query = "Update StateSite Set See+=1 Where Date='" + DateTime.Now.ToShortDateString() + "'";
com.CommandText = query;
}
else
{
query = "Insert Into StateSite (See,Date) Values (@See,@Date)";
com.CommandText = query;
com.Parameters.AddWithValue("@See", 1);
com.Parameters.AddWithValue("@Date", DateTime.Now.ToShortDateString());
}
connect.Open();
com.ExecuteNonQuery();
connect.Close();
}
public static DataSet GetState()
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
string query = "select sum(See) as[All] ,(select See from StateSite where Date='" + DateTime.Now.ToShortDateString() + "')as[Now]," +
"(select See from StateSite where Date='" + DateTime.Now.AddDays(-1).ToShortDateString() + "')as[Last] From StateSite";
SqlDataAdapter da = new SqlDataAdapter(query, connect);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}


به نظر شما چه مشکلی باعث شد این مشکل به وجود بیاد و این ارور رو بده؟؟؟؟؟
ارور
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

mahan206
دوشنبه 03 فروردین 1394, 20:02 عصر
دوستان مشکلش تو این قسمته میشه بهم بگین چطور کوئری این قسمت رو جدا کنم و به سه تابع تیدیل کنم که این مشکل پیش نیاد. وتو فراخوانیش چطور تو یه لیبل نشون بدم.
public static DataSet GetState() {
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
string query = "select sum(See) as[All] ,(select See from StateSite where Date='" + DateTime.Now.ToShortDateString() + "')as[Now]," +
"(select See from StateSite where Date='" + DateTime.Now.AddDays(-1).ToShortDateString() + "')as[Last] From StateSite";
SqlDataAdapter da = new SqlDataAdapter(query, connect);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}

malloc
دوشنبه 03 فروردین 1394, 20:05 عصر
خطا مشخصه ..... اون سلکت داخلی شما با شرطهای نوشته شده باعث میشه که سلکت داخلی بیشتر از یک مقدار برگردونه در صورتی که وقتی سلکت رو به این صورت مینویسید باید سلکت داخلی فقط یک فیلد و یک رکورد برگردونه که دستور سلکت بالایی بتونه اونو توی لیستش جا کنه ....

اومیداورم منظورمو رسونده باشم .... کلا شما 3تا سلکت زدی که دوتاشو توی سلکت اصلی بکار بردی .... یکی از اون دوتا سلکت داخلی احتمالا با شرطهای اعمال شده بیشتر از یک رکورد برمیگردونن که باید 1 رکورد برگردونن تا این خطا رو نده

mahan206
سه شنبه 04 فروردین 1394, 13:14 عصر
سلام تشکر بابت پاسخ
کلا این کد حدود یک ماهی کار میکرد رو هاستم و الان این ارور رو میده و همین کد در سیستم خودم همچنان درست کار میکنه میشه یه کمک بدین چطور اینا رو جدا بنویسم و چطور فراخوانی کنم اخه این کد رو من از اینترنت گرفتم.
از اینجا دانلود کردم.
http://barname nevisan.org/Articles/Article2199.html

malloc
سه شنبه 04 فروردین 1394, 14:02 عصر
داداش منکه نمیدونم اطلاعات داخل دیتابیست چیه .....

شما دوتا دستور زیر رو جداگانه توی NewQuery بزن ببین چندتا رکورد برمیگردونه


1: select sum(See) as[All] ,(select See from StateSite where Date='" + DateTime.Now.ToShortDateString() + "')as[Now]

2: select See from StateSite where Date='" + DateTime.Now.AddDays(-1).ToShortDateString() + "')as[Last]



احتمالا قبلا که توی هاست کار میکرده بابت این بوده که اطلاعاتی توی دیتابیست وجود نداشته که باعث بشه دوتا رکورد برگردونه

mahan206
پنج شنبه 06 فروردین 1394, 11:26 صبح
میتونی با یه مثال یکی از سلکتها رو تو یه تابع بهم نشون بدی.و چطور نشونش بدم داخل یه labelچون هرچی خودم تلاش کردم نتونستم و کلا بلدنیستم.یه مثال بزنی برام یکی از select هارو ممنون میشم.داخل بانکمم یه جدوله به نام StateSite و فیلداش یکی id,see,dateکه کلا میخوام مثلا تاریخ امروز رو نشون بده مقدار seeاون رو تو یه labelالبته با تابع برام بگو.
اگرم که وقت نداری بعد از 13 به در انشاله میچسبم بهش و خودم یه کاریش میکنم بازم تشکر

mahan206
شنبه 08 فروردین 1394, 18:01 عصر
اینجور نوشتمش درست شد
public static DataSet GetState()
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
string query = "select sum(See) as[All] From StateSite";
SqlDataAdapter da = new SqlDataAdapter(query, connect);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
public static string GetStateL()
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
connect.Open();
SqlCommand cmd = new SqlCommand("select * from StateSite where Date='" + DateTime.Now.AddDays(-1).ToShortDateString() + "'", connect);
SqlDataReader ds = cmd.ExecuteReader();

if (ds.Read())
{
string last = ds["See"].ToString();
return last;
}
else {
string last2="0";
return last2;
}

}
public static string GetStateN()
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrin gs["Database20pConnectionString"].ConnectionString);
connect.Open();
SqlCommand cmd = new SqlCommand("select * from StateSite where Date='" + DateTime.Now.ToShortDateString() + "'", connect);
SqlDataReader ds = cmd.ExecuteReader();
ds.Read();
string now = ds["See"].ToString();
return now;
}