PDA

View Full Version : گزارش ترکیبی



اوبالیت به بو
پنج شنبه 01 مرداد 1394, 08:07 صبح
درود بر شما

با استفاده از یکسری DropDownList باید یک گزارش ترکیبی ایجاد شود. این DropDownList های کلید های خارجی هستند. ما در StoredProcedure گزارش مورد نظر را ساخته ایم و وقتی Execute می کنیم و پارامترها را در SQL Server ارسال می کنیم به درستی کار می کنه. اما وقتی از سمت C# اقدام به اجرای اون می کنیم میبینیم که به درستی پارامترها ارسال نشده. مثلا برای String ها به جای Null مقدار "" قرار داده شده. یا بعضی اوقات با خطایthe parameterized query nvarchar 4000 which was not supplied (http://barnamenevis.org/showthread.php?502378-%D8%AE%D8%B7%D8%A7%DB%8C-the-parameterized-query-nvarchar-4000-which-was-not-supplied) مواجه می شیم.


در کل برای ساختن Where Clause چه روشی دارید؟ لطفا اگر مثالی دارید بفرمایید

اوبالیت به بو
شنبه 03 مرداد 1394, 09:03 صبح
به روز رسانی

mbasirati
شنبه 03 مرداد 1394, 21:10 عصر
من دقیقا متوجه نشدم مشکل شما چیه. ولی اگه اون چیزیه که من تو ذهنمه من برای سرچهای اینجوری اول یه کوئری میسازم به این شکل:
select * from table where 1=1

بعد با توجه به شرایط خاص شرطهای جدیدو باهاش and میکنم.

fakhravari
یک شنبه 04 مرداد 1394, 12:52 عصر
باید اونو بر اساس یک فیلد نام برگردونی select text1

اوبالیت به بو
دوشنبه 05 مرداد 1394, 12:41 عصر
باید اونو بر اساس یک فیلد نام برگردونی select text1

یعنی چی؟ من متوجه این جمله نشدم. اگر نمونه قبلا کار کردید مثال بزنید لطفا.

Mahmoud.Afrad
دوشنبه 05 مرداد 1394, 15:13 عصر
کافیه در صورت انتخاب و وجود داده در کنترل ها (مانند زمانی که یک تکست باکس پر و دیگری خالی هست) ، شروط رو به کوئری سلکت دیتاسورس اضافه کنید. البته بایست با پارامتر مناسب داده کنترل مورد نظر رو به کوئری پاس بدی.
مثال:


<asp:Label ID="lblFirstName" runat="server" Text="نام:"></asp:Label>
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
<asp:Label ID="lblLastName" runat="server" Text="نام خانوادگی:"></asp:Label>
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="جستجو" OnClick="btnSearch_Click" />
<asp:GridView ID="gvResult" runat="server" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True" SortExpression="id" Visible="False" />
<asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [id], [FirstName], [LastName] FROM [Tbl]">
</asp:SqlDataSource>

این هم کد دکمه جستجو:

protected void btnSearch_Click(object sender, EventArgs e)
{
SqlDataSource1.SelectParameters.Clear();

SqlDataSource1.SelectCommand += "where ";
if (!string.IsNullOrWhiteSpace(txtFirstName.Text))
{
SqlDataSource1.SelectCommand += " firstname=@FirstName and ";
ControlParameter firstnameControlParameter = new ControlParameter
{
Name = "FirstName",
ControlID = txtFirstName.ID,
PropertyName = "Text",
Type = TypeCode.String,
DefaultValue = null
};
SqlDataSource1.SelectParameters.Add(firstnameContr olParameter);
}
if (!string.IsNullOrWhiteSpace(txtLastName.Text))
{
SqlDataSource1.SelectCommand += " lastname=@LastName and ";
ControlParameter lastnameControlParameter = new ControlParameter
{
Name = "LastName",
ControlID = txtLastName.ID,
PropertyName = "Text",
Type = TypeCode.String,
DefaultValue = null
};
SqlDataSource1.SelectParameters.Add(lastnameContro lParameter);
}

SqlDataSource1.SelectCommand += " 1=1 ";
}





البته میتونی ControlParameter ها را به جای تعریف با سی شارپ ، در داخل تگ SqlDataSource تعریف کنی که در اینصورت به شکل زیر در میاد:


<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [id], [FirstName], [LastName] FROM [Tbl]">
<SelectParameters>
<asp:ControlParameter ControlID="txtFirstName" DefaultValue="Null" Name="FirstName" PropertyName="Text" Type="String" />
<asp:ControlParameter ControlID="txtLastName" DefaultValue="Null" Name="LastName" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>

کد دکمه

protected void btnSearch_Click(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand += "where ";
if (!string.IsNullOrWhiteSpace(txtFirstName.Text))
{
SqlDataSource1.SelectCommand += " firstname=@FirstName and ";
}
if (!string.IsNullOrWhiteSpace(txtLastName.Text))
{
SqlDataSource1.SelectCommand += " lastname=@LastName and ";
}

SqlDataSource1.SelectCommand += " 1=1 ";
}