PDA

View Full Version : auto number درsql



amirreyhaneh
دوشنبه 07 فروردین 1385, 17:16 عصر
سلام
1-معادل فیلد auto number در access ، در sql چیست؟یعنی چکار کنم تا هر رکورد کهبه بانک اضافه شد خودش به اون عدد بدهد؟
2-من یک فیلد از نوع imageدارم .دستوراتی می خواستم تا نحوه ذخیره کردن و بازیابی عکس را بیان کند.ضمنا من از vb.net استفاده می کنم.
ممنون
ان شا الله سال خوبی داشته باشید

nazaninam
دوشنبه 07 فروردین 1385, 18:23 عصر
جواب
1- یه فیلد از نوع Int بگذار و خصیصه identity اونو برابر true قرار بده
2- شما بهتره برای ذخیره عکس نام عکس رو در دیتابیس ذخیره کنی و خود عکس رو داخل یک دایرکتوری فیزیکی بریزی و ازش استفاده کنی مقاله توی این سایت در این مورد زیاده سرچ کنید

amirreyhaneh
دوشنبه 07 فروردین 1385, 22:44 عصر
سلام
با تشکر از شما دوست عزیز .ولی من به خاطر بعضی مسائل امنیتی می خواهم خود عکس را ذخیره کنم.
ممنون

nazaninam
سه شنبه 08 فروردین 1385, 02:35 صبح
البته به نظرم از نظر امنیتی مشکلی وجود نداره و به دردسرش نمی ارزه ولی با این حال میگم:

اول باید توی دیتابیس sql یک فیلد از نوع image ( میتونی از Binary هم استفاده کنی) ایجاد کنی
بعد توی صفحه یک file field قرار میدیم من اسمشو گذاشتم fileupload1 خوب یک باتن هم قرار میدم
ابتد کتابخانه های زیر رو اضافه کن


Imports System.Data
Imports System.Data.SqlClient
Imports System.IO


خوب حالا اون عکس با یک stream میخونیمش و طول محتوای اونو بدست میاریم و بوسیله یک streamreader محتویات اونو داخل یک آرایه از نوع بایت ذخیره میکنیم تا بشه ریختش توی دیتابیس





Dim imgstream As Stream = FileUpload1.PostedFile.InputStream
Dim imglen As Integer = FileUpload1.PostedFile.ContentLength
Dim imgdata(imglen) As Byte
imgstream.Read(imgdata, 0, imglen)


خوب حالا کافیه یک ارتباط با دیتابیست برقرار کنی و این imgdata که از نوع بایت هست رو Insert کنی داخل دیتابیست



Dim con As New SqlConnection(constr)
Dim cmd As New SqlCommand("insert_img", con)
Dim param As SqlParameter = cmd.Parameters.Add("@img", SqlDbType.Image)
param.Value = imgdata

cmd.CommandType = CommandType.StoredProcedure
con.Open()
cmd.ExecuteNonQuery()
con.Close()




کد های بالا تنها جاییش که مهمه اینه : SqlDbType.Image یعنی دیتا تایپت از نوع image باشه

خوب برای خوندن از دیتابیس با یک datareader میخونیمش و با یک binarywriter روی صفحه چاپش می کنیم ( میشه کارای دیگه هم کرد... به سلیقه خودت )




Dim con As New SqlConnection(eclass.constr)
Dim cmd As New SqlCommand("Select_img", myConnection)


con.Open()
Dim myDataReader As SqlDataReader
myDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

Do While (myDataReader.Read())

Response.BinaryWrite(myDataReader.Item("img"))
Loop

con.Close()



موفق باشید

amirreyhaneh
چهارشنبه 09 فروردین 1385, 07:51 صبح
سلام
خیلی ممنونم.
ان شا الله موفق باشید

amirreyhaneh
چهارشنبه 09 فروردین 1385, 08:44 صبح
سلام
ببخشید چند سوال
1-اگر من بخواهم عکس را در یک کنترل image قرار دهم چکار باید بکنم.
2-اگر من یک textbox داشتم که کاربر پسوردی را برای خود در آن وارد کرد چه شکلی در بانک ذخیره کنم که اگر کسی بانک را باز کرد نتواند پسورد را بخواند.چون من یک پروژه دیدم که وقتی بانک را باز می کردی در فیلد پسورد همه کلمه <Binary> نوشته بود.
3-مطالبی از این قبیل که شما فرستادید را از کجا می شود خواند.آیا سایتی مدنظر شما هست؟

اگر سوالاتم ابتدایی است شرمنده چون من تا حالا با accessکار می کردم.
موفق باشید

mahdi_negahi
چهارشنبه 09 فروردین 1385, 09:03 صبح
اگر کنترل شما یک کنترل Server بود از کد زیر

]Imag1.ImageUrl = //address ax

برای اینکه پسورد را رمز کنی میتوانی از تابعGetHashCode استفاده کنی

amirreyhaneh
چهارشنبه 09 فروردین 1385, 16:32 عصر
سلام
دوست عزیز منظور من از نمایش عکس،عکسی است که در SQl Server در یک فیلد از نوع image ذخیره شده است؟
با تشکر

nazaninam
چهارشنبه 09 فروردین 1385, 19:18 عصر
من اولش به شما گفتم این کار خیلی رایج نیست
شما اسم عکس رو توی بانک و خود عکس رو توی یک دایرکتوری فیزیکی روی هاست نگه دارید
در مورد سوال دومتون
برای اینکه پسورد رو در دیتابیس به نحو غیر قابل نفوذ ذخیره کنید می تونید پسورد رو هش کنید
برای این کار 2 راه رو معرفی می کنم:
1- از کد نویسی زیر استفاده کنید


<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server" language="VB">
Sub Login(sender as Object, e as EventArgs)
'1. Create a connection
Const strConnString as String = "connection string"
Dim objConn as New SqlConnection(strConnString)

'2. Create a command object for the query
Dim strSQL as String = "SELECT COUNT(*) FROM UserAccount " & _
"WHERE Username=@Username AND Password=@Password"
Dim objCmd as New SqlCommand(strSQL, objConn)

'3. Create parameters
Dim paramUsername as SqlParameter
paramUsername = New SqlParameter("@Username", SqlDbType.VarChar, 25)
paramUsername.Value = txtUsername.Text
objCmd.Parameters.Add(paramUsername)


'Encrypt the password
Dim md5Hasher as New MD5CryptoServiceProvider()

Dim hashedDataBytes as Byte()
Dim encoder as New UTF8Encoding()

hashedDataBytes = md5Hasher.ComputeHash(encoder.GetBytes(txtPwd.Text ))

Dim paramPwd as SqlParameter
paramPwd = New SqlParameter("@Password", SqlDbType.Binary, 16)
paramPwd.Value = hashedDataBytes
objCmd.Parameters.Add(paramPwd)


'Insert the records into the database
objConn.Open()
Dim iResults as Integer = objCmd.ExecuteScalar()
objConn.Close()

If iResults = 1 then
'The user was found in the DB
Else
'The user was not found in the DB
End If
End Sub
</script>

<form runat="server">
<h1>Login</h1>
Username: <asp:TextBox runat="server" id="txtUsername" />
<br />Password:
<asp:TextBox runat="server" id="txtPwd" TextMode="Password" />
<p><asp:Button runat="server" Text="Login" OnClick="Login" />
</form>



راه راحت ترش این هست

textbox1.text=FormsAuthentication.HashPasswordForS toringInConfigFile(yourpass.text, "MD5")




در مورد بایناری کردن پسورد هم میتونی ابتدا به بایت تبدیلش کنی بعد بایناری شده بریزی توی db مثل همون عکس ولی راحت تر میشه دیگه

amirreyhaneh
پنج شنبه 10 فروردین 1385, 06:17 صبح
آیا برای نمایش عکس از بانک در یک کنترل image راهی وجود ندارد؟

nazaninam
پنج شنبه 10 فروردین 1385, 14:02 عصر
چرا داره ولی اونو به عهده خودتون میگذارم
راهنمایی : عکس کار کدینگ انجام میشه ...یعنی به جای اینکه عکس رو به بایت تبدیل کنید حالا باید بایت ها رو به عکس تبدیل کنید