PDA

View Full Version : نحوه جستجو



majidsoft
دوشنبه 09 شهریور 1388, 15:16 عصر
با سلام
من دو table در sql2005 دارم حالا می خواهم اطلاعات را از یک table خوانده و بر اساس فیلد کد فیلد ساعت را خوانده و در table دوم جایگزین کنم در جای خودش بر اساس فیلد کد من با vb.net کار می کنم
یک سوال دیگر هم داشتم و آن این بود که یک table را از اول تا انتها خوانده و میانگین آنها را حساب کند لطفا کد خواندن از اول تا آخر یک table را برایم بنویسید

با تشکر

als_1360
دوشنبه 09 شهریور 1388, 16:35 عصر
يك راهنمايي كلي :

شما مي توانيد هر دو كار را با استفاده از Storedprocedure ها انجام دهيد /.مي توانيد به راحتي مجموع و ميانگين يك ستون را به دست بياوريد .

majidsoft
دوشنبه 09 شهریور 1388, 21:13 عصر
دوست عزیز این فرمایش حضرتعالی را کاملا می دانم گفتم اگر ممکن است کد آن را بریم بگذارید
با تشکر

mn_zandy63
سه شنبه 10 شهریور 1388, 00:18 صبح
دوست عزیز این فرمایش حضرتعالی را کاملا می دانم گفتم اگر ممکن است کد آن را بریم بگذارید
با تشکر

اگه باز هم نمیگید که اینو میدونم منظورم اینه که کد بنویسید :چشمک:
چرا از یک حلقه استفاده نمیکنید برای انجام عملیات بر روی کل اطلاعات یک datatable که از روی یک table در دیتابیستون پر شده؟

سوال اولت رو هم اصلا متوجه نشدم چی گفتی، یک بار دیگه شمرده تر بگو :چشمک:

موفق باشی

majidsoft
سه شنبه 10 شهریور 1388, 22:11 عصر
ببین دوست عزیز من دو تا table دارم table اول دارای دو فیلد کد و ساعت می باشد و table دوم دارای چند فیلد می باشد ما هر 15 روز جدول اول را از یک فایل اکسل می خوانیم و در table اولی قرار می دهیم بعد table اولی را خوانده و بر اساس فیلد کد رکورد مورد نظر را در table دومی پیدا می کنیم و ساعت را بر اساس اینکه دوره چندم است به table دوم اضافه می کنیم

insert into dore where i=@dore

می خواستم بدانم برای ورود اطلاعات می توان از i به عنوان متغیر استفاده کرد
یعنی شماره ستون را تغییر داد

mn_zandy63
پنج شنبه 12 شهریور 1388, 14:44 عصر
آره شما ستون مورد نظرت رو هم میتونی به عنوان پارامتر به کوئری بدی.

insert into dore where @column=@dore

منظورت همین بود؟

majidsoft
پنج شنبه 12 شهریور 1388, 14:55 عصر
با سلام من از این کد برای اینکار استفاده می کنم ولی چون دو connection تودرتو دارد ایراد می گیرد لطفا به کد یک نگاهی بیندازید

Dim i, k As Integer
Dim Cnn As SqlConnection = Fn_Get_SqlConnection()
Dim Cmd As New SqlCommand("Select * from time1", Cnn)
Dim dr As SqlDataReader
Cnn.Open()
dr = Cmd.ExecuteReader()
While dr.Read()
i = (dr("code"))
k = (dr("hour"))
Dim Cno As SqlConnection = Fn_Get_SqlConnection()
Dim cmo As New SqlCommand("select * from time2 ", Cnn)
cmo.CommandText = "Update time2 set code=@code Where code=@hour"
cmo.Parameters.Clear()
cmo.Parameters.Add("@code", SqlDbType.BigInt).Value = i
cmo.Parameters.Add("@HOUR", SqlDbType.BigInt).Value = k
Cno.Open()
cmo.ExecuteNonQuery()
Cno.Close()
End While
Cnn.Close()
من منظورم در query دادن شماره ستون متغیر است در کد بالا به جای code یک متغیر بنویسم که در برنامه وارد می کنیم وبه ستون مورد نظر می رود

با تشکر

majidsoft
جمعه 13 شهریور 1388, 16:48 عصر
آقا یه نفر جواب ده

majidsoft
جمعه 13 شهریور 1388, 16:53 عصر
آره شما ستون مورد نظرت رو هم میتونی به عنوان پارامتر به کوئری بدی.

insert into dore where @column=@dore

منظورت همین بود؟


می خوا این column@ شماره ستون table باشه که از برنامه می گیره

mn_zandy63
جمعه 13 شهریور 1388, 23:07 عصر
یعنی به جای نام ستون شماره ستون رو به عنوان پارامتر بدی؟

majidsoft
شنبه 14 شهریور 1388, 00:13 صبح
با سلام آره ولی به صورت متغیر یعنی مثلا i که در هر بار یک عدد بگیره

لطفا اگر ممکنه کد بالا هم یک نگاهی بکنید باتشکر

mn_zandy63
شنبه 14 شهریور 1388, 06:10 صبح
سلام دوست عزیز
یک پیشنهاد، برای جلوگیری از باگ های احتمالی آینده پیشنهاد میکنم به جای اینکه از شماره ستون استفاده کنی، از نام ستون ها استفاده کن (حالا به هر روشی)
مثلا:
عدد مورد نظرت رو توی اسم ستونت استفاده کن. مثلا، ستونهایی که قراره بهشون به این شکل دسترسی پیدا کنی، اسم هاشون رو بذار Col1 و Col2 و Col3 و ...
این شکلی هم کد نویسی برای دسترسی بهشون راحت میشه (خیلی راحت به صورت یک رشته پاس میدی به پارامترت و با همون نام ستون کار میکنی) و هم در صورتی که جای ستون ها یا ترتیبشون عوض شد مشکل پیدا نمیکنی.
یا مثلا اسم ستون های مورد نظرت رو بذار توی یک آرایه و با شماره به اسم ستون مورد نظرت برس

اما اگه به هر دلیلی راه حل مورد نظرت حتما باید از شماره ستون استفاده کنه.

با این دستور SQL میتونی شماره ستون رو بدی و نام ستون رو بگیری:
SELECT COL_NAME(OBJECT_ID('Table_Name'), Column_No)

به جای Table_Name نام جدول و به جای Column_No شماره ستون مورد نظرت رو بنویس.

این کوئری رو میتونی مستقیما کد بزنی و بگیری و یا اینکه از Stored procedure ها استفاده کنی.
من یک نمونه Stored Procedure برات میذارم که شماره ستون رو ورودی میگیره و محتویات اون ستون از جدول رو برمیگردونه:
CREATEPROCEDURE [dbo].[SP_NAME] (
@ColumnNo int)
AS
BEGIN
SET NOCOUNT ON;

declare @ColumnName nvarchar(max)

set @ColumnName = COL_NAME(OBJECT_ID('TABLE_NAME'), @ColumnNo)

exec ('SELECT ' + @columnname + ' FROM TABLE_NAME')
END